NSManagedObjectContextWillSaveNotification无法理解对象是否已被删除

时间:2015-09-14 19:27:32

标签: ios swift core-data

我正在使用私有子队列(父队列= 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。我做错了什么?

1 个答案:

答案 0 :(得分:0)

你应该小心你在这里所做的事情,因为看起来你可能正在建造一台Rube Goldberg机器......而且可能会以令人讨厌的爆炸结束。

由于你没有在你的问题中提供足够的细节,我必须做出一些假设......并希望它不会咬我......

无论如何,您似乎正在观察子上下文的NSManagedObjectContextWillSaveNotification,并将已删除的对象与从主/父上下文中获取的对象进行比较。这不起作用(启动可能很危险)。这两个上下文包含完全独立的对象。

您应该比较NSManagedObjectID个对象而不是托管对象本身。

更好的是,如果您想知道孩子何时删除了父MOC中的对象,您可以监视主/父MOC中的NSManagedObjectContextObjectsDidChangeNotification。请注意,此通知将在您自己更改MOC时发生,而不仅仅在子上下文保存时发生。

但是,通知在其userInfo字典中包含一组很好的信息,包括一组已删除的对象。