gpt4 book ai didi

ios - 为什么在将 objectWithID 与 CoreData 一起使用时我没有得到相同的对象?

转载 作者:搜寻专家 更新时间:2023-11-01 07:33:37 25 4
gpt4 key购买 nike

我有一个 NSManagedObjectContext,其中保存了两个 NSManagedObject

我正在另一个线程中调用一个方法,我需要访问这两个 NSManagedObject 所以我创建了一个子上下文,如下所示:

let childManagedContext = NSManagedObjectContext(concurrencyType: .PrivateQueueConcurrencyType)
childManagedContext.parentContext = self.managedContext

当我这样做时:

let myNSManagedObject1 = childManagedContext.objectWithID(self.myNSManagedObject1.objectID) as! MyNSManagedObject
let myNSManagedObject2 = childManagedContext.objectWithID(self.myNSManagedObject2.objectID) as! MyNSManagedObject

myNSManagedObject1myNSManagedObject2self.myNSManagedObject1self.myNSManagedObject2 不是同一个对象。谁能解释一下为什么?

另外,如果我使用 existingObjectWithID 而不是 objectWithID,我在 myNSManagedObject1 中的关系似乎仍然有一个故障对象myNSManagedObject2:

relationShipObject = "<relationship fault: 0x170468a40 'relationShipObject'>"

最佳答案

理解它们是“相同的”,因为它们在您的对象图中指代相同的对象。如果比较所有属性,您会发现它们是相等的。

但是,因为它们处于不同的上下文中,所以它们将是该对象的两个独立实例。所以你看到的机器地址会不一样。我希望这能消除困惑。

至于“错误”,那仅意味着底层对象(或属性)尚未被提取到内存中。这只是一种最小化内存占用的优化机制。如果您要显式记录对象或属性,它将从商店中获取并按预期显示。请参阅 Faulting and Uniquing 中的“Core Data Programming Guide” .

关于ios - 为什么在将 objectWithID 与 CoreData 一起使用时我没有得到相同的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31207674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com