如何获取 NSPropertyDescription 属性的新旧值
Posted
技术标签:
【中文标题】如何获取 NSPropertyDescription 属性的新旧值【英文标题】:How to get old and new value of property of 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 找到了解决方案/解决方法? 【参考方案1】:我面临的问题:
我无法识别目标存储中要更新的记录。解决方法:
在实体中使用标识符字段 这样您就可以根据标识符进行查询并使用新值更新目标存储 标识符在插入后不会/不应该改变【讨论】:
您是否只需要将所有更改的对象更新为新值?或者在两者之间进行一些操作(解决一些冲突等)? 我希望旧值来标识要更新的记录,现在我使用单独的标识符(唯一键)并仅使用标识符来标识要更新的记录。记录的标识符在我的代码中不会改变。结果只是我的设计问题,我已经设法使用标识符解决了【参考方案2】:也许这不是你的情况,但我猜你有来自NSPersistentHistoryTransation
的NSPersistentHistoryChange
。在这种情况下,您可以通过将其合并到上下文中来一次合并来自该事务的全部更改
示例:
guard let userInfo = transaction.objectIDNotification().userInfo else return
NSManagedObjectContext.mergeChanges(fromRemoteContextSave: userInfo, into: [context])
在您的特定secnerio 中,我没有找到如何在NSPersistentHistoryChange
中找到旧值。也许userInfo
包含这些信息
【讨论】:
谢谢,但 userInfo 不包含旧值,在我的情况下,我可以通过一个标识符来处理它,恕我直言,这是更好的方法。以上是关于如何获取 NSPropertyDescription 属性的新旧值的主要内容,如果未能解决你的问题,请参考以下文章