iPhoneに保存されているすべての写真のEXIF情報などのメタデータを取得するために、小さなiPhoneアプリを作成していますが、Assets LibraryFrameworkAPIを呼び出すときに奇妙な問題が発生しました。基本的に、ALAssetReprsentationのメタデータメソッドを呼び出している場合(http://developer.apple.com/library/ios/documentation/AssetsLibrary/Reference/ALAssetRepresentation_Class/Reference/Reference.html#//apple_ref/occ/instm/ALAssetRepresentation/metadata)数百回(同じALAssetReprsentationオブジェクトの場合でも)、APIはエラーを報告し、写真のメタデータの代わりにnullを返します。
この問題を再現するためのコードは次のとおりです。
ALAsset *photo = ... // fetch a photo asset via Assets Library Framework
int i = 0;
ALAssetRepresentation *representation = [photo defaultRepresentation];
NSDictionary *metadata;
while (i<600) {
i++;
metadata = [representation metadata];
NSLog(@"photo %d indexed %@", i, metadata);
}
上記のコードの出力は次のとおりです。出力の最初はすべて問題ありませんが、500回以上経過すると、メタデータAPIは「ImageIO:CGImageSourceCreateWithDataデータパラメーターはnilです」などのエラーを報告します。
...
2011-12-29 21:46:17.106 MyApp[685:707] photo 578 indexed {
ColorModel = RGB;
DPIHeight = 72;
DPIWidth = 72;
...
}
...
ImageIO: <ERROR> CGImageSourceCreateWithData data parameter is nil
2011-12-29 21:46:17.151 MyApp[685:707] photo 579 indexed (null)
ImageIO: <ERROR> CGImageSourceCreateWithData data parameter is nil
2011-12-29 21:46:17.177 MyApp[685:707] photo 580 indexed (null)
iOS5.0.1を搭載したiPhone3GSでテストしています。そして、ARC(自動参照カウント)を有効にしたXcode4.2で開発しています。また、この問題はiPhone 3GSデバイスにアプリをデプロイする場合にのみ再現できますが、同じコードでiOSシミュレーターを使用する場合は再現できません(少なくとも、iOSシミュレーターでAPIを1800回以上呼び出した後はこの問題を再現しません)。
どんな助けでも大歓迎です。ありがとう。