无法撤消和重做以在可可核心数据应用程序中工作



我在核心数据可可应用程序中实现撤消和重做时遇到问题。这是我在同一主题上提出的第二个问题,(您可以在此处阅读我的第一个问题),即使我对第一个问题得到了可靠的建议,我仍然无法撤消和重做以工作。

无论如何。。。这是我当前的代码:

以下是 MainWindowController.h 文件中的相关代码:

#import <Cocoa/Cocoa.h>
#import "AppDelegate.h"
@property (nonatomic,strong) NSManagedObjectContext *mObjContext;
@property AppDelegate *appDelegate;

以下是 MainWindowController.m 文件中的代码:

#import "MainWindowController.h"
@interface MainWindowController () <NSWindowDelegate>
@end
@implementation MainWindowController
- (void)windowDidLoad {
    self.appDelegate = (AppDelegate*)[[NSApplication sharedApplication] delegate];
    self.mObjContext = self.appDelegate.managedObjectContext;
    [[self window]setDelegate:self];
    [self windowWillReturnUndoManager:self.window];
}
- (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window
{
    return [[self document] undoManager];
}
@end

我的窗口在连接检查器中具有以下插座:代理:文件的所有者

菜单

:主菜单

每当我在 nstableviews 中的记录中进行更改时,都会记录更改,但撤消和重做菜单项保持灰色。我在窗口WillReturnUndoManager中放置了断点,但是我看不到任何撤消管理器返回...谁能告诉我我做错了什么?

您返回的是文档的撤消管理器(可能为 nil),而不是托管对象上下文的撤消管理器。将windowWillReturnUndoManager更改为

- (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window
{
    return self.mObjContext.undoManager;
}

好吧,问题终于解决了。我添加新的编辑菜单项,同时保留旧的菜单项。当我在记录中进行更改时,新菜单项具有撤消项可用并起作用。重做也奏效了。

所以我删除了旧的编辑菜单项,现在一切都像魅力一样工作。太糟糕了,我没有早点尝试过,但是....

相关内容

  • 没有找到相关文章

最新更新