【问题标题】:How to get old and new value of property of NSPropertyDescription如何获取 NSPropertyDescription 属性的新旧值
【发布时间】:2019-06-16 17:57:14
【问题描述】:

我设置了一个 CoreData 堆栈,能够检索特定对象的编辑历史记录等。我什至可以确定哪些属性发生了变化。 但是,我正在努力获得该物业的新旧价值。请参阅下面的代码。这甚至可能吗?如果有,怎么做?

func apply(_ changeItem: NSPersistentHistoryChange) {
    switch changeItem.changeType {
    case .update:
        guard let updatedProperties = changeItem.updatedProperties else { break }

        updatedProperties.forEach { (property) in
            // Get old and new value here
        }
    case .insert:
        // ...
    }
    // ...

}

【问题讨论】:

  • 嘿,我也想做同样的事情——但不知道怎么做。你解决了这个问题吗?
  • 很遗憾没有,没有:(
  • @FlorianLeitner 找到了解决方案/解决方法?

标签: ios swift core-data


【解决方案1】:

我面临的问题:

  • 我无法识别目标存储中要更新的记录。

解决方法:

  • 在实体中使用标识符字段
  • 这样您就可以根据标识符进行查询并使用新值更新目标存储
  • 标识符在插入后不会/不应该改变

【讨论】:

  • 您是否只需要将所有更改的对象更新为新值?或者在两者之间进行一些操作(解决一些冲突等)?
  • 我希望旧值来标识要更新的记录,现在我使用单独的标识符(唯一键)并仅使用标识符来标识要更新的记录。记录的标识符在我的代码中不会改变。结果只是我的设计问题,我已经设法使用标识符解决了
【解决方案2】:

也许这不是你的情况,但我猜你有来自NSPersistentHistoryTransationNSPersistentHistoryChange。在这种情况下,您可以通过将其合并到上下文中来一次合并来自该事务的全部更改 示例:

 guard let userInfo = transaction.objectIDNotification().userInfo else { return }           
NSManagedObjectContext.mergeChanges(fromRemoteContextSave: userInfo, into: [context])

在您的特定secnerio 中,我没有找到如何在NSPersistentHistoryChange 中找到旧值。也许userInfo 包含这些信息

【讨论】:

  • 谢谢,但 userInfo 不包含旧值,在我的情况下,我可以通过一个标识符来处理它,恕我直言,这是更好的方法。
猜你喜欢
  • 2015-11-19
  • 1970-01-01
  • 1970-01-01
  • 2019-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 2011-06-11
相关资源
最近更新 更多