撤消/恢复菜单项不适用于基于文档的应用程序OSX 10.7



我用核心数据创建了一个非常简单的基于文档的测试应用程序。我没有编码,只是把它连接起来。XIB文件有一个数组控制器、一个表视图和两个按钮,一个用于添加行,另一个用于删除。数组控制器绑定到文件所有者的managedObjectContext。表中的列绑定到模型中定义的三个实体。按钮连接到阵列控制器的"添加"one_answers"删除"操作。就是这样。应用程序运行良好,但添加或删除行后,"撤消"one_answers"重做"的菜单项将保持禁用状态。要在这个级别启用撤消/重做功能,您需要做些什么吗?

我认为这里的问题可能与此有关:

表中的列绑定到模型中定义的三个实体。

我甚至不确定你会怎么做(将不同的列绑定到不同的实体。)我想知道你是指"在模型中的一个实体上定义的三个属性",但我不确定。

无论如何,我复制了类似于您的设置的东西:一个简单的实体Person,带有一个字符串属性name,一个NSArrayController,在实体模式下,绑定到(File的Owner,managedObjectContext),一个NSTableView,带有一列,绑定到了(Array Controller,managedObjects,name),一切都很好,包括Undo和Redo。

我建议从这个简单的点开始(一个实体、一个属性、一列,一切都正常),一次添加一件小事的复杂性/功能,直到某个东西坏了——当它坏了时,你就会确切地知道是什么坏了。幸运的是,你是从样板开始的,所以没有太多额外的应用程序逻辑。

如果菜单项被禁用,则意味着响应程序链中没有任何内容可以响应其发送的消息。在这种情况下,这可能意味着您的窗口没有返回undoManager。你需要在你的窗口控制器中有这样的东西:

- (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)sender
{
    return [self.managedObjectContext undoManager];
}

最新更新