我很少有MacOS的核心数据项目从Xcode 3开始,在Xcode 4中运行良好,特别是对于Undo / Redo管理。
但是现在我从Xcode 4开始了一个新的Core Data项目,我遇到了Undo的问题:Undo
和Redo
菜单项链接到First Responder的Undo:\Redo:
方法,就像Xcode 3创建的项目一样;但菜单始终处于禁用状态
所以我从菜单项的Enabled
属性绑定到managedObjectContext.undoManager.canUndo / canRedo
:这会在用户对对象进行更改时启用菜单,但无论如何撤消操作都没有效果:菜单仍然存在启用但未撤消。
获取撤消的唯一方法是打破菜单项与First Responder的连接,而是再向AppDelegate的新IBActions创建一个:
- (IBAction)myUndoAction:(id)sender
{
[[[self managedObjectContext] undoManager] undo];
}
- (IBAction)myRedoAction:(id)sender
{
[[[self managedObjectContext] undoManager] undo];
}
以这种方式(并且Enable
属性绑定到canUndo
和canRedo
)这两个菜单项按预期用于Core Data对象;无论如何,我从未遇到过Xcode 3的这个问题。
其他人是否在使用Xcode 4时遇到此问题?我从头开始重新安装Xcode 4.2.1,以避免旧的模板问题,但我又遇到了同样的问题 我不想安装Xcode 3,只是为了启动一个正常运行的项目,然后将项目迁移到Xcode 4! 我用Google搜索并查看了我认识的每个论坛,也查看了Apple的讨论,但我没有找到任何内容。我在10.7.2。
UPDATE
通过将Undo / Redo链接到AppDelegate会破坏其他操作,因为Undo / Redo将始终从ManagedObjectContext调用NSUndoManager
,因此操作必须保持链接到First Responder。
我将不得不坚持使用Xcode 3.2从头开始生成一个核心数据项目,然后从Xcode 4打开它(据我所知,我会发现bug在哪里,可能在模板中......)
答案 0 :(得分:2)
我能够通过让我的窗口控制器实现NSWindowDelegate协议并让它中继windowWillReturnUndoManager:调用应用程序的委托来解决这个问题。