@@ -97,8 +97,9 @@ - (void)photoLibraryDidChange:(PHChange *)changeInstance
9797 BOOL incrementalChanges = assetsChangeDetails.hasIncrementalChanges ;
9898 // Capture removed, changed, and moved indexes before fetching results for incremental chaanges.
9999 // The adjustedIndex depends on the *old* asset count.
100- NSIndexSet *removedIndexes = [self adjustedIndexesForIndexSet: assetsChangeDetails.removedIndexes];
101- NSIndexSet *changedIndexes = [self adjustedIndexesForIndexSet: assetsChangeDetails.changedIndexes];
100+ NSInteger oldCount = assetsChangeDetails.fetchResultBeforeChanges .count ;
101+ NSIndexSet *removedIndexes = [self adjustedIndexesForIndexSet: assetsChangeDetails.removedIndexes forCount: oldCount];
102+ NSIndexSet *changedIndexes = [self adjustedIndexesForIndexSet: assetsChangeDetails.changedIndexes forCount: oldCount];
102103 NSMutableArray *moves = [NSMutableArray array ];
103104 if (assetsChangeDetails.hasMoves ) {
104105 [assetsChangeDetails enumerateMovesWithBlock: ^(NSUInteger fromIndex, NSUInteger toIndex) {
@@ -360,7 +361,11 @@ - (NSInteger)adjustedIndexForIndex:(NSInteger)index forCount:(NSInteger)count
360361 // Adjust the index so items are returned in reverse order.
361362 // We do this, rather than specifying the sort order in PHFetchOptions,
362363 // to preserve the sort order of assets in the Photos app (only in reverse).
363- return (count - 1 ) - index;
364+ if (index < count) {
365+ return (count - 1 ) - index;
366+ } else {
367+ @throw NSRangeException ;
368+ }
364369}
365370
366371- (NSIndexSet *)adjustedIndexesForIndexSet : (NSIndexSet *)indexes
@@ -373,8 +378,11 @@ - (NSIndexSet *)adjustedIndexesForIndexSet:(NSIndexSet *)indexes forCount:(NSInt
373378{
374379 NSMutableIndexSet *adjustedSet = [NSMutableIndexSet new ];
375380 [indexes enumerateIndexesUsingBlock: ^(NSUInteger idx, BOOL * _Nonnull stop) {
376- if (idx != NSNotFound ) {
377- [adjustedSet addIndex: [self adjustedIndexForIndex: idx forCount: count]];
381+ if (idx < count) {
382+ NSInteger adjustedIndex = [self adjustedIndexForIndex: idx forCount: count];
383+ if (adjustedIndex < NSNotFound ) {
384+ [adjustedSet addIndex: adjustedIndex];
385+ }
378386 }
379387 }];
380388
0 commit comments