我正在处理核心数据。我想在我的应用程序的几个事件上更新托管对象。该托管对象在应用启动时创建或获取(如果存在)。我知道托管对象不是线程安全的,所以我没有将托管对象存储在内存中,而是存储objectID
它,因为它是线程安全的。一旦对象被创建并保存到上下文中,我objectID
就会存储它,所以我确信存储的 objectID 是永久的,而不是临时的。
在我想更新我的对象的事件中,我有以下代码:
self.managedObjectContext.performBlock {
let myObject = self.managedObjectContext.objectWithID(objectId) as! MyClass
myObject.property = myValue
self.managedObjectContext.save()
}
这在大多数情况下都可以正常工作,但是在某些情况下,我正在使用对象self.managedObjectContext.objectWithID(objectId)
但它的所有属性都是 nil,这不应该发生,因为对象已经创建并保存在上下文中。
有人可以指出获取具有 nil 属性值的对象的原因吗?
我知道的唯一原因是在objectWithID
使用临时 objectID 调用方法时,但在我的情况下这不是真的,因为我只使用永久 objectID。