【问题标题】:Getting managedObject with all values nil, using objectWithID使用 objectWithID 获取所有值为零的 managedObject
【发布时间】:2016-11-14 06:56:38
【问题描述】:

我正在处理核心数据。我想在我的应用程序的几个事件上更新托管对象。该托管对象在应用启动时创建或获取(如果存在)。我知道托管对象不是线程安全的,所以我没有将托管对象存储在内存中,而是存储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 方法时,但在我的情况下这不是真的,因为我只使用永久 objectID。

【问题讨论】:

    标签: swift core-data ios9 nsmanagedobjectcontext nsmanagedobjectid


    【解决方案1】:

    如果您收到 nil 的所有值,这意味着该对象在您最近访问之前已被删除。

    观看 WWDC 2015 的 Core Data 视频。引入此行为是为了避免在您保留对已删除 NSManagedObject 的引用时出现问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-30
      • 1970-01-01
      相关资源
      最近更新 更多