iphone - 如何恢复 CoreData NSManagedObjectContext 中 NSUndoManager 的内容?

标签 iphone core-data undo redo

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

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

最佳答案

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

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

起初,我推测您可以将 NSManagedObjectID、选择器(使用 NSStringFromSelector)和对象写入磁盘,并通过调用 -registerUndoWithTarget 来恢复它们:选择器:对象:。然而,在进一步查看文档后,我们发现无法访问堆栈并对其进行迭代。

关于iphone - 如何恢复 CoreData NSManagedObjectContext 中 NSUndoManager 的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1982984/

相关文章:

ios - 当我创建一个新的 UIWindow 时,iPad airplay 显示器显示黑屏

iphone - UI导航按钮更改

ios - 在 Xcode 8.1 中创建 NSManagedObject 类显示错误

javascript - ionic2 - 仅当用户在 Toast 中单击 "close"时才创建函数

git - 如何在不使用 reset 的情况下撤消 git 中的快进 merge

git - 使用 git-revert 撤消推送 merge 的提交哈希?

ios - Swift 将 Int[] 转换为 Int 变量

iphone - 强制 symbolicatecrash 使用特定的 .app 和 .dSYM 文件?

ios - 如何从核心数据 objective-c 中的两个表中获取数据

objective-c - 调用 NSFetchedResultsController 的 fetchedObjects 属性是否会导致所有对象出错?