2015-10-14 27 views
2

这是PHPhotoLibraryObserverUICollectionView - 尝试删除并重新加载相同的索引路径

- (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]; 
      } 
     } 
    }); 
} 

我在其他应用程序

此删除照片后得到的错误是一个错误:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'attempt to delete and reload the same index path ({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]; 

我不知道什么是错的..

回答

-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]]; 
相关问题