Improve handling in LiveObject and ObjectSnapshot when objects are deleted

This commit is contained in:
John Estropia
2019-10-17 19:27:03 +09:00
parent bd066f0cef
commit 6e3e540d0a
9 changed files with 194 additions and 118 deletions

View File

@@ -106,7 +106,7 @@ extension NSManagedObjectContext {
}
@nonobjc
internal func objectsDidChangeObserver<U: AnyObject>(for observer: U) -> Internals.SharedNotificationObserver<Set<NSManagedObjectID>> {
internal func objectsDidChangeObserver<U: AnyObject>(for observer: U) -> Internals.SharedNotificationObserver<(updated: Set<NSManagedObjectID>, deleted: Set<NSManagedObjectID>)> {
return self.userInfo(for: .objectsChangeObserver(U.self)) { [unowned self] in
@@ -114,11 +114,11 @@ extension NSManagedObjectContext {
notificationName: .NSManagedObjectContextObjectsDidChange,
object: self,
queue: .main,
sharedValue: { (notification) -> Set<NSManagedObjectID> in
sharedValue: { (notification) -> (updated: Set<NSManagedObjectID>, deleted: Set<NSManagedObjectID>) in
guard let userInfo = notification.userInfo else {
return []
return (updated: [], deleted: [])
}
var updatedObjectIDs: Set<NSManagedObjectID> = []
if let updatedObjects = userInfo[NSUpdatedObjectsKey] as? Set<NSManagedObjectID> {
@@ -129,7 +129,8 @@ extension NSManagedObjectContext {
updatedObjectIDs.formUnion(mergedObjects)
}
return updatedObjectIDs
let deletedObjectIDs: Set<NSManagedObjectID> = (userInfo[NSDeletedObjectsKey] as? Set<NSManagedObjectID>) ?? []
return (updated: updatedObjectIDs, deleted: deletedObjectIDs)
}
)
}