我正在使用writeImageToSavedPhotosAlbum:orientation:completionBlock:
保存图片,没关系。然后我想在相册中有一系列资产。
第一次刷新我的数组时,它不会计算新图像,而第二次调用它时工作正常。
为什么?我知道writeImageToSavedPhotosAlbum
启动了另一个线程,并且在保存操作完成后调用了块,不是吗?
这是我用来保存图像和刷新数组的代码:
[_album refresh];
ALAssetsLibrary* library = [[ALAssetsLibrary alloc] init];
[library writeImageToSavedPhotosAlbum:image
metadata:metadataAsMutable
completionBlock:^(NSURL *assetURL, NSError *error) {
if (error) {
NSLog(@"ERROR: the image failed to be written");
}
else {
NSLog(@"PHOTO SAVED - assetURL: %@", assetURL);
}
[_album refresh];
[_album refresh];
[spinner stopAnimating];
[self close];
}];
这是refresh
函数:
- (void)refresh {
[_imgAssets removeAllObjects];
if (_albumGroup) {
[_albumGroup enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
if(result == nil) {
NSLog(@"done enumerating photos (%d)", [_imgAssets count]);
return;
}
[_imgAssets addObject:result];
//NSLog(@">> enumerating photos (%d)", [_imgAssets count]);
}];
}
}
这就是我获得的:
2013-06-04 23:19:07.962 PhotInfo[4835:c07] done enumerating photos (29)
2013-06-04 23:19:08.041 PhotInfo[4835:c07] PHOTO SAVED - assetURL: assets-library://asset/asset.JPG?id=CDC2E97A-FF47-4A52-99E2-574037155D92&ext=JPG
2013-06-04 23:19:08.042 PhotInfo[4835:c07] done enumerating photos (29)
2013-06-04 23:19:08.044 PhotInfo[4835:c07] done enumerating photos (30)
此外,如果我用
替换3refresh
中的第二个
[_album performSelectorOnMainThread:@selector(refresh) withObject:nil waitUntilDone:YES];
它可能会也可能不会读取添加的图像。
问题出在哪里?
感谢您的帮助。
答案 0 :(得分:0)
我已决定在ALAssetsLibraryChangedNotification
上设置观察者。