0

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

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

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

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

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

有什么想法或指导吗?

4

2 回答 2

3

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

- (void)awakeFromSnapshotEvents:(NSSnapshotEventType)flags

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

于 2010-08-27T19:27:43.513 回答
0

当我删除模型对象时会出现问题。发生这种情况时,关联的视图与所有键值观察一起被销毁。

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

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

于 2010-08-27T18:52:39.590 回答