Core data 使用Xcode 4执行核心数据和撤消操作

Core data 使用Xcode 4执行核心数据和撤消操作,core-data,xcode4,objective-c-2.0,nsundomanager,Core Data,Xcode4,Objective C 2.0,Nsundomanager,我有几个MacOS的核心数据项目是从Xcode 3开始的,它在Xcode 4中表现良好,特别是在撤消/重做管理方面。 但是现在我从Xcode 4开始了一个新的核心数据项目,我面临着撤销的问题:Undo和Redo菜单项链接到第一响应者的Undo:\Redo:方法,就像Xcode 3创建的项目一样;但菜单始终处于禁用状态。 因此,我将菜单项的Enabled属性绑定到managedObjectContext.undoManager.canUndo/canRedo:当用户更改对象时,这将启用菜单,但无论

我有几个MacOS的核心数据项目是从Xcode 3开始的,它在Xcode 4中表现良好,特别是在撤消/重做管理方面。
但是现在我从Xcode 4开始了一个新的核心数据项目,我面临着撤销的问题:
Undo
Redo
菜单项链接到第一响应者的
Undo:\Redo:
方法,就像Xcode 3创建的项目一样;但菜单始终处于禁用状态。
因此,我将菜单项的
Enabled
属性绑定到
managedObjectContext.undoManager.canUndo/canRedo
:当用户更改对象时,这将启用菜单,但无论如何,撤消操作没有效果:菜单保持启用状态,但没有撤消操作。
获得撤销的唯一方法是断开菜单项与第一响应程序的连接,而是与AppDelegate的新iActions建立另一个连接:

- (IBAction)myUndoAction:(id)sender  
{
    [[[self managedObjectContext] undoManager] undo];
}

- (IBAction)myRedoAction:(id)sender
{
    [[[self managedObjectContext] undoManager] undo];
}
通过这种方式(并且使用绑定到
canUndo
canRedo
Enable
属性),两个菜单项都可以按预期为核心数据对象工作;无论如何,我从来没有在Xcode 3上遇到过这个问题

是否有其他人在使用Xcode 4时遇到此问题?为了避免旧的模板问题,我从头开始重新安装了Xcode 4.2.1,但我又遇到了同样的问题。
我不喜欢同时安装Xcode 3,只是从一个正常工作的项目开始,然后将项目迁移到Xcode 4
我在谷歌上搜索了我知道的每一个论坛,也搜索了苹果的讨论,但什么都没找到。我在10.7.2上


更新
通过将Undo/Redo链接到AppDelegate将中断其他操作,因为Undo/Redo将始终从ManagedObjectContext调用
NSUndoManager
,因此操作必须保持与第一响应者的链接。

我必须坚持使用Xcode 3.2从头开始生成一个核心数据项目,然后从Xcode 4打开它(据我所知,错误在哪里,可能在模板中…)

通过让我的窗口控制器实现NSWindowDelegate协议,并让它中继windowWillReturnUndoManager:对应用程序的委托的调用,我能够自己解决这个问题。

谢谢Tyler,这个问题解决了!我刚刚注意到,XCode 4中的CoreData模板带有未设置为AppDelegate的主窗口代理:这可能是windowWillReturnUndoManager从未被调用的原因。@max.me我遇到了同样的问题,在我将windows的代理设置为“AppDelegate”后,它就可以工作了“当然是Interface Builder中的NIB文件。但现在我也想了解这里发生了什么:)有人能解释一下吗?