我已经实现了一个带有两个UIViewController子类的自定义图库:AlbumController和PhotosController。第一个显示所有图库相册,第二个显示选定相册中的所有照片。
一切正常,除了当我从远程存储库(目前是Flickr)下载图片到Camera Roll相册时。在这种情况下,每当我转到AlbumController时,我都会看到所有相册,并且Camera Roll的相册封面会用最后下载的图像刷新,但当我转到Camera Roll相册的PhotosController时,我什么也看不到。如果我在下载完所有图像后进入Camera Roll相册,则会看到所有图像。
PhotosController.h:
ALAssetsGroup *album;PhotosController.m:
-(void) viewDidAppear:(BOOL)animated{
if( albumHasChanged ){
[self performSelectorInBackground:@selector(prepareAlbumPhotos)
withObject:nil];
[self performSelector:@selector(reloadPhotosTableView)
withObject:nil
afterDelay:.5];
albumHasChanged = NO;
}
}
#pragma mark - Private methods
-(void)prepareAlbumPhotos {
[albumAssets removeAllObjects];
@autoreleasepool {
[self.album enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop)
{
// No assets are returned while images are being downloaded!!
// ... albumAssets gets filled
}];
[self reloadPhotosTableView];
}
}
-(void) reloadPhotosTableView{
[photosTableView reloadData];
}在另一个类中,我下载图像并将它们添加到库中,如下所示:
UIImage *img = [UIImage imageWithData:data];
UIImageWriteToSavedPhotosAlbum(img, nil, nil, nil); 有人能解释为什么在向ALAssetsGroup写入图像时enumerateAssetsUsingBlock:不返回任何资产吗
在这种情况下,是否有从Camera Roll相册读取资源的解决方法?
发布于 2012-01-20 23:27:59
问题是,每次您在电话画廊中保存新图像时,对Camera Roll ALAssetsGroup的引用都会更改,并且不再有效(虽然不是空的)。
在我的例子中,我下载并写入了许多图片,所以每次我试图在我的图库中查看它们时,对相册的引用都发生了变化,因此,enumerateAssetsUsingBlock:没有返回任何内容。
为了避免这个问题,我首先将所有图片下载到一个文件夹中,然后将图片复制到图片库中,并使用UIAlertView消息阻止应用程序,但没有通知该过程的按钮。通过这个实现,我解决了这个问题。
如果你想同时保存一些图像,你可能会发现另一个问题。看看这个问题和答案:https://stackoverflow.com/a/8177014
https://stackoverflow.com/questions/8926320
复制相似问题