我正在构建的应用程序中使用照片库功能,因此用户可以从应用程序内拍照,并将它们保存到自定义相册中,并附加特殊元数据以识别哪些图片属于该应用程序。
保存图片后,我尝试重新加载我的表格以显示它找到的内容,但它永远找不到最近添加的图片。只有在我离开视图并再次打开它之后,它才会找到最新的图片。
我使用此类别保存到自定义相册。这是我的代码中的一些摘录,显示了保存/加载过程
保存
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];
}
}];
}
一切都使用元数据正确解码,只是我刚刚添加到库中的一张图像没有显示出来。