使用objectWithID获取所有值为nil的managedObject

时间:2016-07-12 06:59:38

标签: swift core-data ios9 nsmanagedobjectcontext nsmanagedobjectid

我正在处理核心数据。我想在我的应用程序的几个事件上更新托管对象。在app启动时创建或获取该托管对象(如果存在)。我知道托管对象不是线程安全的,所以我没有将托管对象存储在内存中,而不是我存储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属性值获取对象的原因吗?

我知道的唯一原因是在使用临时objectID调用objectWithID方法时,但在我的情况下这不是正确的,因为我只使用永久对象ID。

1 个答案:

答案 0 :(得分:0)

如果您获得nil所有值,则意味着在您最近访问之前删除了该对象。

观看来自WWDC 2015的核心数据视频。此行为是为了避免在您保留对已删除的NSManagedObject的引用时出现问题。

相关问题