如何获取 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】:

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

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

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

【讨论】:

谢谢,但 userInfo 不包含旧值,在我的情况下,我可以通过一个标识符来处理它,恕我直言,这是更好的方法。

以上是关于如何获取 NSPropertyDescription 属性的新旧值的主要内容,如果未能解决你的问题,请参考以下文章

JS如何获取OBJECT的值

js如何获取某一个元素,如果获取不到就继续获取,直到获取到后停止获取?

Groovy如何获取访问地址

js如何获取时间

js如何获取地址栏加密参数

webbrowser如何获取cookie中的sessionid