2016-07-26 3 views
2

PHPhotoLibraryを使用して、iPhoneで自分のアプリケーションのアルバムの画像を保存および取得しています。PHPhotoLibraryでphotoLibraryDidChangeがすべての更新を通知しない

多くの画像(約5,000枚の静止画像)がある場合、 私のアプリケーションはネットワークから10枚の画像をダウンロードし、カメラロールに保存してアプリケーションのアルバムに追加します。

同時に、アプリケーションは追加されたイメージを知るためにphotoLibraryDidChangeコールバックを観察しますが、挿入されたイメージは5つだけ通知します。

ホームボタンを押してフォトアプリケーションのカメラロールとアルバムをチェックしてアプリケーションを終了します。 正しく5010の画像があります。

多分photoLibraryDidChagneはすべての変更を通知しませんか?

私のコードは以下の通りです。

NSLogとDebuggerによって挿入されたアセットをチェックして、本当に5つのイメージを更新しました。

他の5枚の画像はありません。

答えて

0

私のコードで間違った点が修正され、変更後に問題が発生しないことが確認されました。

間違ったポイント:いくつかのケースで

  1. 、私のコード 'のリターン;'コールバック内の資産収集を取得する前に
  2. 私は修正のために、以下のAppleのコードを参照さ[PHAsset fetchAssetsInAssetCollection:options:]

fetchResultChangeDetails.fetchResultAfterChanges instaedから新しい結果を取得する必要があります。

PHPhotoLibraryChangeObserver https://developer.apple.com/library/ios/documentation/Photos/Reference/PHPhotoLibraryChangeObserver_Protocol/

私の固定コードは以下のようなものです。ありがとうございました。

- (void)handleChangedLibrary:(PHChange *)changeInstance 
{ 
    // Check for changes to the list of assets (insertions, deletions, moves, or updates). 
    PHFetchResultChangeDetails *fetchResultChangeDetails = [changeInstance changeDetailsForFetchResult:_assetsFetchResult]; 
    if (!fetchResultChangeDetails) { 
     NSLog(@"### No change in fetchResultChangeDetails ###"); 
     return; 
    } 

    // Get the new fetch result for future change tracking. 
    self.assetsFetchResult = fetchResultChangeDetails.fetchResultAfterChanges; 

    if (![fetchResultChangeDetails hasIncrementalChanges]) { 
     [self fetchAllAssets];   
     return; 
    } 

    NSArray *insertedObjects = [fetchResultChangeDetails insertedObjects]; 
    if (insertedObjects) { 
     for (PHAsset *asset in insertedObjects) { 
      if (asset.mediaType == PHAssetMediaTypeImage) { 
       NSLog(@"asset=%@", asset); 
       [_stillImageAssetArray addObject:asset]; 
      } 
     } 
    } 
} 
関連する問題