我很少有从 Xcode 3 开始的 MacOS 核心数据项目,这些项目在 Xcode 4 中表现良好,尤其是在 Undo/Redo 管理方面。
但是现在我从 Xcode 4 开始了一个新的 Core Data 项目,我遇到了 Undo 的问题:Undo
和Redo
菜单项链接到Undo:\Redo:
First Responder 的方法,就像 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
and的属性canRedo
),两个菜单项都可以按 Core Data 对象的预期工作;无论如何,我从来没有遇到过 Xcode 3 的这个问题。
其他人是否面临 Xcode 4 的这个问题?我从头开始重新安装了 Xcode 4.2.1,以避免旧模板问题,但我又遇到了同样的问题。
我也不喜欢安装 Xcode 3,只是从一个正常运行的项目开始,然后将项目迁移到 Xcode 4!
我用谷歌搜索并查看了我知道的每个论坛,还有 Apple 讨论,但我没有找到任何东西。我在 10.7.2。
更新
通过将 Undo/Redo 链接到 AppDelegate 将中断其他操作,因为 Undo/Redo 将始终NSUndoManager
从 ManagedObjectContext 调用,因此操作必须保持链接到 First Responder。
我必须坚持使用 Xcode 3.2 从头开始生成一个核心数据项目,然后从 Xcode 4 打开它(据我所知,错误在哪里,可能在模板中......)