0

我们知道,在 iOS 上,NSManagedObjectContext 没有默认的 NSUndoManager 实例。如果我们想在 Core Data 中支持撤销/重做,我们需要实例化我们自己的。

这是我在 appDelegate 中写的:

(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
[MagicalRecord setupAutoMigratingCoreDataStack];
NSUndoManager *undo = [[NSUndoManager alloc] init];
[[NSManagedObjectContext MR_context] setUndoManager:undo];

return YES;
}

但后来,当我观察时:

NSLog(@"%p", [NSManagedObjectContext MR_context].undoManager);

结果总是什么都没有,这意味着 undoManager 从未被实例化。任何人都可以建议在使用 MagicalRecord 时添加撤消/重做支持的正确方法。

4

1 回答 1

3

以下代码不起作用,因为您使用 MR_context 创建了一个新上下文。这个新的上下文将在语句之后被释放。

[[NSManagedObjectContext MR_context] setUndoManager:undo];

您要设置默认上下文的撤消管理器

[[NSManagedObjectContext MR_defaultContext] setUndoManager:undo];
于 2013-06-07T08:58:22.710 回答