众所周知,在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时,谁能建议正确的方法来添加撤消/重做支持。

最佳答案

以下代码无效,因为您使用MR_context创建了新的上下文。该新上下文将在语句后释放。

[[NSManagedObjectContext MR_context] setUndoManager:undo];


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

[[NSManagedObjectContext MR_defaultContext] setUndoManager:undo];

关于ios - 将MagicalRecord与NSUndoManager结合使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12344526/

10-10 00:57