1

私が構築しているアプリでフォト ギャラリー機能を使用しているため、ユーザーはアプリ内から写真を撮ることができ、カスタム アルバムに保存され、どの写真がアプリに属しているかを識別するための特別なメタデータが添付されます。

画像を保存した後、見つかったものを表示するテーブルを再読み込みしようとしましたが、最後に追加された画像が見つかりません。ビューを離れて再度表示した後でのみ、最新の画像が見つかります。

このカテゴリを使用して、カスタム アルバムに保存します。これは、保存/読み込みプロセスを示す私のコードからの抜粋です

保存

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 つの画像だけが表示されません。

4

0 に答える 0