2012-01-19 28 views
0

我已經實現了一個包含兩個UIViewController子類的自定義畫廊:AlbumControllerPhotosController。第一個顯示所有圖庫相冊,第二個顯示所選相冊中的所有照片。ALAssetsGroup enumerateAssetsUsingBlock:不返回資產

一切工作正常,除了當我從遠程存儲庫(Flickr在此刻)下載圖像到相機膠捲相冊。在這種情況下,每當我轉到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:在向其寫入圖像時不返回任何資產?

在這種情況下,是否有解決方法可以從相機膠捲相冊中讀取資源?

回答

0

問題是,每次您在手機圖庫中保存一個新圖像時,對相機膠捲ALAssetsGroup的引用都會發生變化並且不再有效(不是零)。

在我的情況下,我正在下載和編寫許多圖像,所以每次我試圖在我的畫廊中查看它們時,該專輯的參考號都發生了變化,因此enumerateAssetsUsingBlock:未返回任何內容。

爲了避免這個問題,我首先將所有圖像下載到一個文件夾中,然後將圖像複製到阻止應用程序的圖庫中,並輸入UIAlertView消息,沒有按鈕,通知過程。通過這個實現我解決了這個問題。

如果您想同時保存一些圖像,可能會發現另一個問題。看看這個問題和答案以及:https://stackoverflow.com/a/8177014