Skip to content

Instantly share code, notes, and snippets.

@bobspryn
Created December 10, 2014 18:07
Show Gist options
  • Save bobspryn/e984898e1acfd48382c2 to your computer and use it in GitHub Desktop.
Save bobspryn/e984898e1acfd48382c2 to your computer and use it in GitHub Desktop.
tableChangeSet.m
- (NSDictionary *) generateChangeSetsForSection:(NSString *) section withNewObjects:(NSOrderedSet *) newObjects fromOldObjects:(NSOrderedSet *) oldObjects {
NSSet *newObjectsSet = [newObjects set];
NSSet *previousObjectsSet = [oldObjects set];
NSMutableSet *insertedObjects = [newObjectsSet mutableCopy];
[insertedObjects minusSet:previousObjectsSet];
NSMutableSet *deletedObjects = [previousObjectsSet mutableCopy];
[deletedObjects minusSet:newObjectsSet];
NSMutableSet *updatedObjects = [newObjectsSet mutableCopy];
[updatedObjects minusSet:insertedObjects];
[updatedObjects minusSet:deletedObjects];
NSMutableSet *changes = [NSMutableSet set];
for (id object in insertedObjects) {
[changes addObject:@{kTCTableUpdateType: @(NSFetchedResultsChangeInsert),
kTCTableUpdateNewIndex: @([newObjects indexOfObject:object])}];
}
for (id object in deletedObjects) {
[changes addObject:@{kTCTableUpdateType: @(NSFetchedResultsChangeDelete),
kTCTableUpdateOldIndex: @([oldObjects indexOfObject:object])}];
}
for (id object in updatedObjects) {
[changes addObject:@{kTCTableUpdateType: @(NSFetchedResultsChangeMove),
kTCTableUpdateOldIndex: @([oldObjects indexOfObject:object]),
kTCTableUpdateNewIndex: @([newObjects indexOfObject:object])}];
}
return @{kTCTableUpdateSection: section,
kTCTableUpdateChanges: [changes copy]};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment