我正在使用私有子队列(父队列= NSMainQueueConcurrencyType
)来删除对象,而在我的控制器中我正在听NSManagedObjectContextWillSaveNotification
。
目标是了解是否删除了给定对象(在控制器中显示)。在主队列中获取对象(使用NSMainQueueConcurrencyType
)。
以下是代码:
let savingContext = notification.object as! NSManagedObjectContext
let deletedObjects = savingContext.deletedObjects
if deletedObjects.contains(myModel!) {
myModel = nil
}
删除对象后,我收到通知,我的对象存在。唯一的问题是,他们有不同的对象
deletedObjects: [<model: 0x7fab705e5ca0> (entity: model; id: 0xd000000000b00002 <x-coredata://B60C4E0B-EE90-49DE-8E51-3A3C75763994/Model/p44> ; data: {
// same values here
})],
mymodel:(<model: 0x7fab705e2090> (entity: model; id: 0xd000000000b00002 <x-coredata://B60C4E0B-EE90-49DE-8E51-3A3C75763994/Model/p44> ; data: {
// same values here
}))
所以永远不会执行myModel = nil
。我做错了什么?
答案 0 :(得分:0)
你应该小心你在这里所做的事情,因为看起来你可能正在建造一台Rube Goldberg机器......而且可能会以令人讨厌的爆炸结束。
由于你没有在你的问题中提供足够的细节,我必须做出一些假设......并希望它不会咬我......
无论如何,您似乎正在观察子上下文的NSManagedObjectContextWillSaveNotification
,并将已删除的对象与从主/父上下文中获取的对象进行比较。这不起作用(启动可能很危险)。这两个上下文包含完全独立的对象。
您应该比较NSManagedObjectID
个对象而不是托管对象本身。
更好的是,如果您想知道孩子何时删除了父MOC中的对象,您可以监视主/父MOC中的NSManagedObjectContextObjectsDidChangeNotification
。请注意,此通知将在您自己更改MOC时发生,而不仅仅在子上下文保存时发生。
但是,通知在其userInfo
字典中包含一组很好的信息,包括一组已删除的对象。