2013-06-04 51 views
0

我使用writeImageToSavedPhotosAlbum:orientation:completionBlock:來保存圖像,這沒關係。然後我需要相冊中的一組資源。writeImageToSavedPhotosAlbum並枚舉相冊中的圖像

我第一次刷新我的數組時,它不會計算新圖像,同時第二次調用它可以正常工作。 爲什麼?我知道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) 

此外,如果我將refresh中的第二個替換爲

[_album performSelectorOnMainThread:@selector(refresh) withObject:nil waitUntilDone:YES]; 

它可能會或可能不會讀取添加的圖像。

問題在哪裏?

感謝您的幫助。

+0

我不確定是否有問題,我認爲只有圖像可用之前有一個延遲。它確實吸引人,我只是用一個表演選擇器來解決它。不是我喜歡它... – Wain

+0

是的。事實上,我已經嘗試了一個簡單的等待,但要推遲多少?問題是我認爲圖像立即可用... – asclepix

回答

0

我已經解決上ALAssetsLibraryChangedNotification設置的觀察員。