私が構築しているアプリでフォト ギャラリー機能を使用しているため、ユーザーはアプリ内から写真を撮ることができ、カスタム アルバムに保存され、どの写真がアプリに属しているかを識別するための特別なメタデータが添付されます。
画像を保存した後、見つかったものを表示するテーブルを再読み込みしようとしましたが、最後に追加された画像が見つかりません。ビューを離れて再度表示した後でのみ、最新の画像が見つかります。
このカテゴリを使用して、カスタム アルバムに保存します。これは、保存/読み込みプロセスを示す私のコードからの抜粋です
保存
NSMutableDictionary *realMetaData = [[NSMutableDictionary alloc] init];
[realMetaData setObject:metaData forKey:(NSString*)kCGImagePropertyTIFFDictionary];
[library saveImage:imageToSave toAlbum:albumName metadata:realMetaData withCompletionBlock:^(NSError *error) {
if ( error != nil )
{
NSLog(@"Error saving picture? %@", error);
}
[self loadAlbum];
}];
読み込み中
-(void) loadAlbum
{
[library groupNamed:albumName withCompletionBlock:^(NSError *error, ALAssetsGroup *foundGroup) {
if ( error == nil )
{
self.album = foundGroup;
[self loadAssets];
}
else
{
NSLog(@"Error loading album: %@", error);
}
}];
}
-(void) loadAssets
{
// self.assets = [NSMutableArray arrayWithCapacity:album.numberOfAssets];
for ( id key in [events allKeys] )
{
NSArray *event = [events objectForKey:key];
if ( event != nil && event.count > 0 )
{
[events removeObjectForKey:key];
}
}
[album enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
if ( result != nil )
{
NSDictionary *metaData = result.defaultRepresentation.metadata;
// NSLog(@"Retrieved image metadata: %@", metaData);
NSDictionary *tiffData = [metaData objectForKey:(NSString*)kCGImagePropertyTIFFDictionary];
NSString *encodedData = [tiffData objectForKey:(NSString*)kCGImagePropertyTIFFImageDescription];
if ( encodedData != nil )
{
NSArray *parts = [encodedData componentsSeparatedByString:@"##"];
if ( parts.count == 3 )
{
NSLog(@"Found picture named %@", [parts objectAtIndex:2]);
NSString *eventName = [parts objectAtIndex:1];
NSArray *foundEvent = [events objectForKey:eventName];
if ( foundEvent != nil )
{
NSMutableArray *mutableEvent = [foundEvent mutableCopy];
[mutableEvent addObject:result];
[events setObject:mutableEvent forKey:eventName];
}
else
{
NSMutableArray *newEvent = [[NSMutableArray alloc] init];
[newEvent addObject:result];
[events setObject:newEvent forKey:eventName];
}
}
}
}
else
{
[self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];
}
}];
}
すべてがメタデータで正しくデコードされますが、ライブラリに追加したばかりの 1 つの画像だけが表示されません。