PHPhotoLibrary
iPhone でアプリケーションのアルバムの画像を保存して取得するために使用しています。
アルバムに大量の画像 (約 5,000 枚の静止画像) がある場合、アプリケーションはネットワークから 10 枚の画像をダウンロードし、カメラ ロールに保存してアプリケーションのアルバムに追加します。
同時に、アプリケーションphotoLibraryDidChange
は追加された画像を知るためにコールバックを監視しますが、挿入された画像を 5 つしか通知しません。
HOMEボタンを押してアプリを終了し、フォトアプリでカメラロールとマイアルバムを確認。正しくは 5010 枚の画像があります。
多分photoLibraryDidChagne
すべての変更を通知しませんか?
私のコードは以下のようなものです。
- (void)photoLibraryDidChange:(PHChange *)changeInstance
{
// dispatch main queue
dispatch_async(dispatch_get_main_queue(), ^{
[self handleChangedLibrary:changeInstance];
});
}
- (void)handleChangedLibrary:(PHChange *)changeInstance
{
PHFetchResultChangeDetails *fetchResultChangeDetails = [changeInstance changeDetailsForFetchResult:_assetsFetchResult];
if (!fetchResultChangeDetails) {
NSLog(@"### No change in fetchResultChangeDetails ###");
return;
}
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];
}
}
}
self.assetsFetchResult = [PHAsset fetchAssetsInAssetCollection:_assetCollection options:nil];
}
挿入されたアセットを NSLog と Debugger で確認したところ、本当に 5 つの画像が更新されました。
他の5枚の画像については通知はありません。