我使用Core Data设置了一个优雅的系统,每次更改模型对象的属性时,它都会使用键值观察自动反映在其关联的视图中,但是我遇到了使用undo的问题。 / p>
删除模型对象时会出现问题。发生这种情况时,相关视图将与所有键值观察一起被销毁。用户突然决定删除是个坏主意,并发出撤消命令来恢复模型对象。在这一点上,键值观察已被破坏,我似乎无法找到一种很好的方法来确定哪个模型对象已经从死亡中恢复并重新设置了所有内容。
我想到的当前解决方案是注册NSUndoManagerDidUndoChangeNotification,然后手动浏览我的Core Data模型对象,看看哪些没有关联的视图。我认为必须有一种方法可以知道哪个特定物体已被带回来,并认为这种方法会有点过分。
我还考虑过创建一个撤销组,当模型对象重新出现时,重新添加删除的视图,但我希望只有在可能的情况下才让我的撤销管理器与模型相关。
我想我正在寻找的解决方案就是让撤消经理说:“嘿!任何有兴趣的人都会听!我只是做了撤消,这里是已经复活的核心数据模型对象!用它做你会的!“然后我设置视图就好像已经创建了一个新的模型对象。
任何想法或指导?
答案 0 :(得分:3)
NSManagedObject的以下方法可能是再次设置观察的正确方法:
- (void)awakeFromSnapshotEvents:(NSSnapshotEventType)flags
在撤消/重做操作
之后,它被发送到NSManagedObject答案 1 :(得分:0)
删除后会出现问题 一个模型对象。相关的观点是 与所有的关键价值一起被摧毁 观察何时发生。
我不确定你的意思,但是当模型删除某些东西时,视图不应该与视图对象本身死亡的模型直接关联。控制器应该处理它并且应该能够逆转它。
听起来你需要为undo manager notifications.中的一个注册控制器。这至少会让你知道撤消何时执行,然后你可以采取适当的行动。