我已经实现了一个包含两个UIViewController
子类的自定义库:AlbumController
和PhotosController
。第一个显示所有画廊专辑,第二个显示所选专辑中的所有照片。
除非我将图像从远程存储库(目前为Flickr)下载到Camera Roll相册,否则一切正常。在这种情况下,每当我转到AlbumController
时,我都会看到所有相册,相机胶卷的专辑封面会使用上次下载的图像进行刷新,但是当我转到相机的PhotosController
时卷专辑,我什么都没看到。如果我在下载完所有图像后进入相机胶卷相册,那么我会全部看到它们。
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);
有人可以解释为什么enumerateAssetsUsingBlock:
在将图片写入ALAssetsGroup
时没有返回任何资产?
在这种情况下,是否有解决方法从“相机胶卷”相册中读取资源?
答案 0 :(得分:0)
问题在于,每次在手机图库中保存新图像时,对相机胶卷ALAssetsGroup
的引用都会更改并且不再有效(不是零)。
在我的情况下,我正在下载和编写许多图像,因此每次我尝试在我的图库中查看它们时,对相册的引用都发生了变化,因此,enumerateAssetsUsingBlock:
没有返回任何内容。
为了避免此问题,首先我将所有图像下载到一个文件夹,然后,我将图像复制到图库,使用UIAlertView
消息阻止应用程序,没有按钮,通知进程。通过这种实现,我解决了这个问题。
如果您想同时保存一些图像,可能会发现另一个问题。也请看一下这个问题和答案:https://stackoverflow.com/a/8177014