无法在 cocoa 核心数据应用程序中进行撤消和重做
Can't make undo & redo to work in cocoa core data app
我在核心数据 cocoa 应用程序中执行撤消和重做时遇到问题。这是我就同一主题提出的第二个问题 (),即使我在第一个问题上得到了可靠的建议,我仍然无法撤消和重做。
无论如何...这是我当前的代码:
这里是来自 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
我的 window 在连接检查器中有以下出口:委托:文件所有者
菜单:主菜单
每当我对 nstableviews 中的记录进行更改时,都会记录更改,但撤消和重做菜单项保持灰色。我在 windowWillReturnUndoManager 中放置了断点,但我在那里看不到任何返回的 undoManager...谁能告诉我我做错了什么?
您正在返回文档的 undoManager(可能为 nil)而不是托管对象上下文的 undoManager。将 windowWillReturnUndoManager
更改为
- (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window
{
return self.mObjContext.undoManager;
}
嗯,问题终于解决了。我添加了新的编辑菜单项,同时保留了旧的。当我在记录中进行更改时,新菜单项具有可用的撤消项并且有效。重做也有效。
所以我删除了旧的编辑菜单项,现在一切正常。太糟糕了,我没有早点尝试这个,但是....
我在核心数据 cocoa 应用程序中执行撤消和重做时遇到问题。这是我就同一主题提出的第二个问题 (
无论如何...这是我当前的代码:
这里是来自 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
我的 window 在连接检查器中有以下出口:委托:文件所有者
菜单:主菜单
每当我对 nstableviews 中的记录进行更改时,都会记录更改,但撤消和重做菜单项保持灰色。我在 windowWillReturnUndoManager 中放置了断点,但我在那里看不到任何返回的 undoManager...谁能告诉我我做错了什么?
您正在返回文档的 undoManager(可能为 nil)而不是托管对象上下文的 undoManager。将 windowWillReturnUndoManager
更改为
- (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window
{
return self.mObjContext.undoManager;
}
嗯,问题终于解决了。我添加了新的编辑菜单项,同时保留了旧的。当我在记录中进行更改时,新菜单项具有可用的撤消项并且有效。重做也有效。
所以我删除了旧的编辑菜单项,现在一切正常。太糟糕了,我没有早点尝试这个,但是....