2

这是PHPhotoLibraryObserver

- (void)photoLibraryDidChange:(PHChange *)changeInstance
{
    dispatch_async(dispatch_get_main_queue(), ^{
        PHFetchResultChangeDetails *collectionChanges = [changeInstance changeDetailsForFetchResult:self.assetsFetchResults];
        if (collectionChanges) {
            self.assetsFetchResults = [collectionChanges fetchResultAfterChanges];
            if (![collectionChanges hasIncrementalChanges] || [collectionChanges hasMoves]) {
                [self.collectionView reloadData];
            } else {
                // if we have incremental diffs, tell the collection view to animate insertions and deletions
                [self.collectionView performBatchUpdates:^{
                    NSIndexSet *changedIndexes = [collectionChanges changedIndexes];
                    if ([changedIndexes count]) {
                        [self.collectionView reloadItemsAtIndexPaths:[changedIndexes indexPathsFromIndexesWithSection:0]];
                    }
                    NSIndexSet *removedIndexes = [collectionChanges removedIndexes];
                    if ([removedIndexes count]) {
                        [self.collectionView deleteItemsAtIndexPaths:[removedIndexes indexPathsFromIndexesWithSection:0]];
                    }
                    NSIndexSet *insertedIndexes = [collectionChanges insertedIndexes];
                    if ([insertedIndexes count]) {
                        [self.collectionView insertItemsAtIndexPaths:[insertedIndexes indexPathsFromIndexesWithSection:0]];
                    }
                } completion:nil];
            }
        }
    });
}

删除其他应用中的照片后出现错误

这是一个错误:

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“尝试删除并重新加载相同的索引路径({length = 2, path = 0 - 0})”

当我排序PHFetchResult如下。崩溃如上

PHFetchOptions *options = [[PHFetchOptions alloc] init];
options.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO]];
self.assetsFetchResults = [PHAsset fetchAssetsWithOptions:options];

当我将排序选项设置为零时。顺利

self.assetsFetchResults = [PHAsset fetchAssetsWithOptions:nil];

我不确定有什么问题。。

4

1 回答 1

-1

在尝试重新加载之前过滤掉已删除的索引:

NSIndexSet *changedIndexes = [changeDetails changedIndexes];
NSMutableIndexSet *safeChangedIndexes = [[NSMutableIndexSet alloc] init];

// Filter out indexes that we've deleted
[changedIndexes enumerateIndexesUsingBlock:^(NSUInteger index, BOOL *stop)
{
    if (![removedIndexes containsIndex:index])
    {
        [safeChangedIndexes addIndex:index];
    }
}];
[self.collectionView reloadItemsAtIndexPaths:[safeChangedIndexes indexPathsFromIndexesWithSection:0]];
于 2015-10-24T00:31:03.270 回答