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

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

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

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

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

起初我理论上你可以写出NSManagedObjectID,选择器(使用NSStringFromSelector)和对象到磁盘并通过调用-registerUndoWithTarget:selector:object:来恢复它们.但是,在进一步审查文档后,无法访问堆栈以便能够迭代它.

点赞