iOSのメールの添付ファイルを開くときに選択したアプリの動作について

iPhoneアプリ開発で、メールに添付されたファイルを自分が作ったアプリで開きたい場合、についての悩み。

[iPhone/iPad] メールの添付ファイルをアプリケーションで開けるようにする | Sun Limited Mt.

ファイルを受け取る
メールの添付ファイルからアプリケーションを指定すると application:didFinishLaunchingWithOptions: の launchOptions にファイルの URL (file://…というスキーマ) で渡されます。

AppDelegateのdidFinishLaunchingWithOptionsを使うと、添付ファイルがoptionの引数として受け取ることができる。が、このデリゲートはアプリが初めて起動するときに呼ばれるため、バックグラウンドで起動中などであった場合には当然呼ばれない。つまり完全にアプリを終了しなければならないということになる。

iOSのライフサイクル – iOS Docs

各メソッドは、下記のタイミングで呼び出されます。
application:didFinishLaunchingWithOptions
はじめての起動時に呼び出される
application:applicationWillResignActive
アプリが非Activeになる直前に呼び出される
application:applicationDidEnterBackground
アプリが非Activeになりバックグランド実行になった際に呼び出される
application:applicationWillEnterForeground
2回目以降の起動時に呼び出される(Backgroundにアプリがある場合)
application:applicationDidBecomeActive
アプリがActiveになった際に呼び出される
application:applicationWillTerminate
システムからのアプリ終了の際に呼び出される

アプリが2回目の起動の場合
application:applicationWillEnterForeground > application:applicationDidBecomeActive

applicationDidBecomeActiveでオプションurlがとれればいいのだけれども、そういうデリゲートは見つからなかった。

catch launchOptions in applicationDidBecomeActive

英語の掲示板でも同様の話題を見つけた。
application:openURL:sourceApplication:annotation: これで何か出来るんだろうか。

試しに下記メソッドをAppDelegate.mに記入してみた。

-(BOOL) application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{

NSLog(@”method is called”);

return YES;
}

で、アプリを起動して、一旦ホーム画面に戻って、メールを起動して、添付ファイルからアプリを起動してみると、上記デリゲートが呼ばれた。(詳しい理由についてはわかっていない)
でさらにテストしてみると、上記メソッドのパラメータの openURL:(NSURL *)url の部分が didFinishLaunchingWithOptions で受け取れるオプションと同じことになっている様子。(これもまた詳しい理由はわかっていない)

この辺りに重要なことが書いてあるような気がする。
UIApplicationDelegate Protocol Reference

Discussion
Your implementation of this method should open the specified URL and update its user interface accordingly. If your app had to be launched to open the URL, the app calls the application:willFinishLaunchingWithOptions: and application:didFinishLaunchingWithOptions: methods first, followed by this method. The return values of those methods can be used to prevent this method from being called. (If the app is already running, only this method is called.)

さらに詳しい説明はほかのサイトで調査してみてください。誰かの何かの参考になれば幸いです。

UITableviewのCellに設定したUITextFieldが画面外にスクロールすると内容が消える件

UITableViewCellにコードでUITextFieldをaddSubviewしたとき、例えばテキストフィールドが複数行あってスクロールしたときに画面外に消えて、再表示したら入力したはずの値が消えてしまう、という場合。

UITableViewが再描画されているんだろうけれど、セルの再利用のidentiferなどを設定してみたりしたがよくわからない。どうやっても消える。仕方がないのでベストな対応策が見つかるまでの応急処置として変数に入力した値を保存しておくことにする。

  1. UITextFieldにTagとデリゲートを設定しておく
  2. UITableViewCellに設定したUITextFieldに入力
  3. textFieldDidEndEditingデリゲートを呼んで値を変数に保存
  4. セルの描画時にその変数をセット

とりあえずこれで入力した値がスクロールから戻ってきてもテキストフィールド内に残ったままになるが、なんか、美しくないような・・・。

UITextField emptied in UITableView when scrolled out of view

sony reader t3 の手書きメモを使ってみた

srt3sony reader t3にインストールされている手書きメモアプリについて。試しに色々と描いてみたが、先の細いスタイラスペンなどでは上手く書くことができず、指や接地面積の広いタッチペンなどならなめらかに書くことができる。描いた後のメモは保存して、画像に変換してPCに取り込んで右の画像のようにブログにアップロードするというような使い方もできる。いいなこれ。

ペンタブレットで手書きの絵をかくということが苦手だったが、これだとより正確に描けるかもしれない。精度はあまりよくないかもしれないが。ブギーボードでやりたかったことがすべてこれでできることに気づいた。

ディスプレイドライバの応答停止と回復 のエラーについて

画面が突然暗くなってから数秒して復帰する、という現象が頻発するようになった。PCを再セットアップしてからなったので具体的な発生原因がわからず。やれることはやるだけやってみたが(ドライバを最新にしてみたり)、結局改善せず。グラフィックドライバに問題があるようでnvlddmkmというものがなんとかかんとかとぐぐってみたら出てきたが、これという解決方法は結局見つからずじまい。ノートPCなのでNVIDIAのグラボを交換することもできない。あくまで私個人の解決方法だけれども、ノートPCでNVIDIAのグラボが載ってて「ディスプレイドライバの応答停止と回復」というエラーが発生するというケース。

  • サブディスプレイをつないで2画面(デュアルモニタ)にする

どういうわけだかVGAケーブルで外部ディスプレイを接続して2画面にしている間だけはディスプレイドライバの応答停止と回復というエラーが(今のところは)発生していない。こんなのは根本的な解決策でもなんでもないが藁にもすがる思いで困っている人はお試しあれ。

猫にファーミネーターを使ってみた

ファーミネーターを使ってみた猫の抜け毛がコロコロでは対処しきれなくなったのでファーミネーターという抜け毛を取る道具を使ってみた。安かったので期待はしてなかったが一応取れることは取れる。というか、キリがない。30分ぐらいやってみたが適当に切り上げないといつまでたってもブラシにごっそり毛がからみつく。これとコロコロを併用してなんとか部屋の中の抜け毛が少しでも減ればいいが。

将棋倶楽部24は強すぎ

本文とは関係ありません久しぶりに将棋倶楽部24で将棋を指してみたところ全く勝てなくなってしまっている。レーティングは400点前後で12級~13級をうろうろしていたがこのクラスでも相当強い。いや強すぎる。相穴熊で180手ぐらいかけて詰むや詰まざるやという勝負の結果惨敗というのが5連敗続いてしまって自信喪失してしまった。このままだと15級まで落ちるのも時間の問題で初心者になってしまう。将棋歴10年超えてるのに。

猫が寝てるところを盗撮

img_0829猫によっては仰向けに寝転んだ状態のときにさわろうとすると手を噛むことがある。野良猫経験がある猫は危険察知して触らせまいとするのかもしれない。家猫だと無防備で触らしてくれたりするんだけれども、野良猫で喧嘩ばかりしている猫は仰向けの状態で襲いかかられると命にかかわるので反射的に抵抗してしまう・・・とか考えてみたが猫に聞いてみないことにはわからない。背中から手を回してお腹をさわるのはOKで、正面から、特に仰向けの状態から胸からお腹をさわろうとすると両手の爪で捕獲されて噛まれてしまう。多少手加減してくれるが結構痛かったりする。

メタルマックス4がいつの間にか発売されてた

メタルマックス4 月光のディーヴァ

以前チェックしてキャラデザがちょっと・・・という印象を抱いていたが、そのメタルマックス4が発売されている模様。

そのキャラクターがこれ。メタルマックス4

デザイナーは山本貴嗣さんで、初代メタルマックスのキャラデザも担当していたはず。パッケージ絵がこれ。メタルマックス

メタルマックスらしいというか、初代から順に追っていけばさほど違和感はないが、いきなり4のキャラデザから見るとえっと思うかもしれない。(メタルマックス3のキャラデザは別の人が担当したっぽいが)
この人がデザインした敵キャラがバリエーション豊かで私がメタルマックスを好きになった理由でもある。
人物のキャラデザは現代の鑑識眼で見ると違和感ありまくりだが、それがメタルマックスらしいところでもあるので好き嫌いが別れるんだろうか。

公式サイト見ていたら気づいたが、今回からメタルマックスもDLCを導入した模様。
http://metalmax.info/special/

●ぬめぬめ細胞 [01]~[05]【価格:300円】 ※最大で99個×5セット分を購入することができます。

ぬめぬめ細胞300円・・・。メタルマックス2でうっかり売ってしまって、神社の前の犬に食べさせることができずに戦車1台取りそこねたことがある私にとっては助かるかもしれないが、DLCの流行って早く終わらんかな。

デバイヤーの鉄フライパンを買った

通信販売でデバイヤーというフランスのメーカーの鉄フライパンを買った。フライパンというかクレープパンというタイプの縁が浅いフライパン。鉄フライパンなので空焼きという作業が必要なので、コンロの火を強火でフライパンを青白く変色するまで熱する。そのあとは冷まして、油を引いて、また弱火で熱するという作業をした。(ネットで調べたらそういうふうにするらしかった)

空焼きが済んだばかりの鉄フライパンで試しに目玉焼きを作ってみることにした。油引きで油を十分に塗って弱火で目玉焼きを作ってみたところ、思ったよりもひっつかなかった。別の鉄フライパンで作ったときはたかが目玉焼きと作っていたら引っ付くのなんのってボロボロの卵焼きができてしまったが、今回はわずかに焦げてこびりついた程度で概ね成功した。それも一発で。その後は試しにと思ってこの鉄クレープパンでお好み焼きを焼いてみた。また油引きで十分サラダ油を引いて、熱して、と焼いてみたところ、また上手く行った。まったくひっつかない。フライパンの上でお好み焼きがツルッと滑るかのように。買ったばかりのフライパンなのに使い込みもしないでこれほど上手く焼けるとは過去に鉄フライパンで苦労したことがある私にとっては意外だった。

ところで、鉄フライパンというものを使うときは油返しという作業が必要なようだが、本当に必要なのだろうか。いろいろ焼いてみたが、特に油返しという作業は行っていないで引っ付くということもなかった。

デバイヤーのフライパン(クレープパン)油引きは百均で売ってるものを使用。アマゾンにも売ってるけど500円ぐらいするのでやめた。で、このフライパンよく見ると把手の部分が曲がってくっついているような。フランス製クオリティーだとこんなもんなのかな。とれなければ別にいいけど。