ALAssetsGroup enumerateAssetsUsingBlock:不返回资产

时间:2012-01-19 12:51:45

标签: iphone objective-c ios ipad gallery

我已经实现了一个包含两个UIViewController子类的自定义库:AlbumControllerPhotosController。第一个显示所有画廊专辑,第二个显示所选专辑中的所有照片。

除非我将图像从远程存储库(目前为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时没有返回任何资产?

在这种情况下,是否有解决方法从“相机胶卷”相册中读取资源?

1 个答案:

答案 0 :(得分:0)

问题在于,每次在手机图库中保存新图像时,对相机胶卷ALAssetsGroup的引用都会更改并且不再有效(不是零)。

在我的情况下,我正在下载和编写许多图像,因此每次我尝试在我的图库中查看它们时,对相册的引用都发生了变化,因此,enumerateAssetsUsingBlock:没有返回任何内容。

为了避免此问题,首先我将所有图像下载到一个文件夹,然后,我将图像复制到图库,使用UIAlertView消息阻止应用程序,没有按钮,通知进程。通过这种实现,我解决了这个问题。

如果您想同时保存一些图像,可能会发现另一个问题。也请看一下这个问题和答案:https://stackoverflow.com/a/8177014