4

我想在CoreData(NSManagedObject)对象上的iPhone应用程序中使用NSUndoManager,这样如果应用程序过早退出(例如,由于来电),我可以保存(并稍后恢复)NSUndoManager的状态。即,与自动丢弃或保存在 NSUndoManager 中累积的更改相反,我想恢复它们,以便用户在重新启动应用程序时可以选择显式丢弃或保存它们。

有没有人有这方面的经验?当应用程序中断时,任何人都可以推荐这种(或替代)方法来管理 NSManagedObjectContext 中的未决更改吗?

4

2 回答 2

2

NSUndoManager实际上并不存储状态,它存储了一堆将恢复状态的操作。例如,如果您有一个对象 XXX,并且它的属性名称是一个字符串,并且您将该名称从“Steve”更改为“Joe”,则 NSUndoManager 存储的是目标、选择器和对象。目标是 XXX 的实例,选择器是@selector(setName:),对象是@"Steve"

通过存储该信息,如果撤消堆栈被弹出,它将调用-setName:具有 @"Steve" 值的对象 XXX 的实例,从而恢复其状态。围绕 KVO 等做了一些额外的工作,但这是基础。

起初,我认为您可以将NSManagedObjectID、选择器(使用NSStringFromSelector)和对象写入磁盘并通过调用-registerUndoWithTarget: selector: object:. 但是,在进一步查看文档后,无法访问堆栈以对其进行迭代。

于 2010-01-02T16:14:01.067 回答
0

请注意,通过使用单独的 NSManagedObjectContexts 存在一种可能的解决方法,以便在关闭时保存一些,而另一些则回滚其更改。它并不完美,但我找到了一个合适的解决方案来解决我的问题。

于 2010-02-23T15:35:18.650 回答