Hatena::Groupiphone-dev

Ni chicha, ni limona - 平均から抜けられない僕

2011-01-09

[AssetsLibrary] Assets Libraryフレームワークを使うときの注意点 11:32  [AssetsLibrary] Assets Libraryフレームワークを使うときの注意点 - Ni chicha, ni limona - 平均から抜けられない僕 を含むブックマーク はてなブックマーク -  [AssetsLibrary] Assets Libraryフレームワークを使うときの注意点 - Ni chicha, ni limona - 平均から抜けられない僕  [AssetsLibrary] Assets Libraryフレームワークを使うときの注意点 - Ni chicha, ni limona - 平均から抜けられない僕 のブックマークコメント

Assets Libraryフレームワークは、ご存じのとおりフォトライブラリの中の全メディアプログラムからアクセス出来るようになる素敵なフレームワークです。

これを使えば、たとえば

  • 複数の画像を一度に選択できるイメージピッカー(そしてFlickrに一括転送、とか)
  • 画像管理アプリ
  • 好きなあの子の写真だけを表示出来るスライドショーアプリ
  • 撮影した写真のExif情報を取得
  • ライブラリ内の画像にExif情報を付けて別名保存(上書きは不可)

みたいなことができるわけです。今さらかもしれませんが、本当に便利なフレームワークなのです。なのですよね!


さて、このフレームワークを使っているとき*1に1つ気づいた点がありますので、記しておきます。


注意点:「ALAssetsGroupのposterImageメソッドは、大元のALAssetsLibraryオブジェクトが解放されていると、nilを返すことがある」


これはどういうことかと言いますと、ALAssetsLibraryから取り出したALAssetsGroupで得られるグループの代表画像(=posterImageメソッドで得られるサムネイル画像)は、ALAssetsLibraryが解放されていると、正常な画像が得られないことがあるということです。確認し切れていませんが、さらに先のALAssetを取得する段階でも問題が発生する可能性があります。


// マズいコード
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library enumerateGroupsWithTypes:ALAssetsGroupAll
				    usingBlock:resultBlock
				  failureBlock: errorBlock];
[library release]; // これだと以降のグループに対する処理がおかしくなってしまう!

上記のようにグループ取得後にリリースした場合、それ以降にALAssetsGroupオブジェクトに対して行う処理が失敗してしまうようになります。確認した範囲では、ときどき失敗したりと、不安定になっていました。

ですので、上記のALAssetsLibraryオブジェクトはクラスのメンバー変数にしておくことが必要になります。


// OKなコード
// --- @interface部 ---
ALAssetsLibrary *library_; // メンバー変数で持たせる

// --- @implementation部 ---
library_ = [[ALAssetsLibrary alloc] init]; // そして保持したままにする!
[library_ enumerateGroupsWithTypes:ALAssetsGroupAll
				     usingBlock:resultBlock
				   failureBlock: errorBlock];

お気を付けください。


Assets Libraryフレームワークに関する資料は、現在だと世界中を見渡しても非常に少なく、クラスリファレンスとにらめっこして、動作のトライ&エラーを繰り返して開発しなければいけません。

しかし、今月発売される「iOS4プログラミングブック」にはこのAssets Libraryフレームワークについての解説が載っています。フォトライブラリに溜まる写真を活用したい方は、ぜひ手にとってご確認くださいませ。


  

iOS4プログラミングブック

iOS4プログラミングブック


*1:iOS SDK4.2.1で確認しました。

msrdzebirwmsrdzebirw2013/12/18 05:27sucemjqipof.efw, <a href="http://www.tvwaunanwi.com/">auhexwbpnz</a> , [url=http://www.fssvrrtnmw.com/]niirjwuska[/url], http://www.rgwvzwlfds.com/ auhexwbpnz