【问题标题】:What is the proper way to be notified of a Core Data model object being restored after a deletion?在删除后通知 Core Data 模型对象被恢复的正确方法是什么?
【发布时间】:2011-04-04 22:57:58
【问题描述】:

我使用 Core Data 建立了一个优雅的系统,每当模型对象的属性发生更改时,它都会使用键值观察自动反映在其关联视图中,但我在使用 undo 时遇到了问题。

当我删除模型对象时会出现问题。发生这种情况时,关联的视图与所有键值观察一起被销毁。用户突然决定删除是一个坏主意,并发出恢复模型对象的撤消命令。此时键值观察已被破坏,我似乎无法找到一个好的方法来确定哪个模型对象已从死里复活并重新设置所有内容。

我想到的当前解决方案是注册 NSUndoManagerDidUndoChangeNotification,然后手动检查我的核心数据模型对象并查看哪些没有关联的视图。我认为必须有一种方法可以知道哪个特定对象已被带回,但我认为这种方法有点过头了。

我还考虑过创建一个撤消组,在模型对象重新出现时重新添加已删除的视图,但我希望仅在可能的情况下保持我的撤消管理器与模型相关。

我想我正在寻找的解决方案是让撤消管理器说,“嘿!任何有兴趣的人都听好了!我刚刚做了一个撤消,这里是已经复活的核心数据模型对象!用它做你会怎么做!”然后我设置视图,就像创建了一个新的模型对象一样。

有什么想法或指导吗?

【问题讨论】:

    标签: cocoa core-data ios nsundomanager


    【解决方案1】:

    NSManagedObject 的以下方法可能是再次设置观察的正确点:

    - (void)awakeFromSnapshotEvents:(NSSnapshotEventType)flags
    

    在撤消/重做操作后发送到 NSManagedObject

    【讨论】:

    • 这很好用。一旦撤消插入发生,我就会发出通知,然后从重新插入的模型对象创建关联的控制器和视图。谢谢!
    【解决方案2】:

    删除后出现问题 一个模型对象。关联的视图是 连同所有键值一起销毁 观察何时发生。

    我不确定你的意思是什么,但是视图不应该与模型直接相关,以至于当模型删除某些东西时视图对象本身就会死掉。控制器应该处理它并且应该能够扭转它。

    听起来您需要为undo manager notifications. 之一注册控制器,这至少会让您知道何时执行撤消,然后您可以采取适当的措施。

    【讨论】:

    • 抱歉,很模糊。我确实在模型和视图之间有一个控制器,它处理所有键值观察、删除和其他杂项以进行设置和拆卸。当控制器观察到模型对象上的任何属性已更改时,它将更新视图。当控制器被通知模型对象已被删除时,它将删除视图,然后将自己标记为删除。我查看了撤消管理器通知,但看起来我必须查看所有模型才能查看已恢复的对象。它可以工作......但似乎太重了。
    猜你喜欢
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-16
    • 1970-01-01
    • 2011-01-08
    相关资源
    最近更新 更多