问题标签 [nsundomanager]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
179 浏览

objective-c - Is there a better way to access the Document from its subviews?

I have some classes located on my Document such as NSNotificationCenter and NSUndoManager that I need access to from my subviews.

Right now I can access them by doing something like this:

Is there a better approach I don't know about? Thanks.

0 投票
1 回答
329 浏览

cocoa - NSUndoManager - 撤消按钮不显示

我有一个有会议的文件。当我初始化会议时,我将 undoManager 设置为指向 Document 的 undoManager。同样,我的会议有与会者(人员列表)。每个 Person 对象都简单地指向我会议的 undoManager,而后者又只是指向 Document 的指针。

在我开始观察人员属性的关键值之前,我在会议中添加和删除与会者的撤消操作一直有效。

关于我做错了什么的任何想法?当我添加和删除与会者时,撤消按钮未激活。同样,当我更改此人的姓名/费率时,撤消按钮不会出现。

文档.m

会议.h ---

会议.m

0 投票
1 回答
3627 浏览

objective-c - NSUndoManager 重做功能难以实现

我正在尝试NSUndoManager在我的 iOS 应用程序中实现一个。我让撤消功能工作,但不是重做部分。我对 iOS 开发很陌生,这是我第一次使用NSUndoManager,所以它可能是微不足道的。

我的应用程序是一个绘画/笔记应用程序,我有一个撤消/重做堆栈,最后十个UIImages(我不知道这是否是最有效的方式)在一个数组中。当用户对当前图像进行更改时,旧图像被压入堆栈,如果数组已经有十个对象,则删除数组中的第一个图像。我有一个int实例变量,用于跟踪数组中的对象并确保显示正确的图像。我的代码如下所示:

当我单击撤消或重做按钮时,应该调用resetImage,并将当前图像设置为图像堆栈中的下一个或上一个对象(undoRedoStackIndex 的当前值),这仅在我单击撤消时发生,而不是重做时发生。

解决方案 && || 更好的方法将不胜感激。

0 投票
3 回答
1338 浏览

cocoa - 删除 WebView 的 NSUndoManager 的撤消操作

我有几个 WebView 可以在视图层次结构中进出。其中一些 WebView 包含表单字段,因此我实现了 editingDelegate 来为我的文档提供 NSUndoManager。

问题是在 WebView 中完成的任何输入都会生成放置在撤消堆栈上的操作。从层次结构中删除视图后,操作仍在撤消堆栈中。此时,如果用户使用 Cmd-Z 来“撤消键入”,则会引发异常,因为 -undoEditing: 正在发送到 WebEditorUndoTarget 的已释放实例。(WebKit 实现中使用的私有类。)

我不能使用 -removeAllActionsWithTarget: 因为我不能引用目标。看来唯一的解决方案是禁用 WebView 的撤消注册。

我错过了什么还是这是 WebView 的限制?

0 投票
1 回答
432 浏览

objective-c - NSUndoManager 添加和删除 textVIew 作为子视图

我如何使用 NSUndo 管理器添加或删除子视图,可能是视图控制器中的文本视图。我已经看到了许多文本视图文本撤消重做的示例。但是找不到如何使用 nsundomanager 从视图中添加或删除视图。任何人都可以帮帮我吗..

0 投票
1 回答
225 浏览

objective-c - 基于文档的应用程序中的 NSUndoManager 错误行为

在我的基于文档的应用程序中,我为 [self undoManager] 调用 prepareWithInvocationTarget 和 registerUndoWithTarget。但是,在编辑菜单中,撤消和重做仍然是空白的。我可以通过调用 [[self undoManager] undo] 手动执行撤消,它可以工作。

只是为了确保,我创建了一个新项目,在其中调用 prepareWithInvocationTarget 和 registerUndoWithTarget。魔法!现在可以单击编辑菜单中的撤消/重做元素。

这可能是什么原因?我尝试在界面生成器中检查连接,但它们与我创建的新项目中的相同。知道如何解决吗?

0 投票
1 回答
253 浏览

iphone - UITextView 撤消位置

我对 a 的开头、中间和结尾做了一些更改UITextView。然后我通过以下方式逐步撤消:

我想以编程方式滚动UITextView到每个相应的undo位置,在每个undo.

如何检索最后/即将到来的undo位置?

0 投票
1 回答
660 浏览

core-data - Xcode 4 的核心数据和撤消操作

我很少有从 Xcode 3 开始的 MacOS 核心数据项目,这些项目在 Xcode 4 中表现良好,尤其是在 Undo/Redo 管理方面。
但是现在我从 Xcode 4 开始了一个新的 Core Data 项目,我遇到了 Undo 的问题:UndoRedo菜单项链接到Undo:\Redo:First Responder 的方法,就像 Xcode 3 创建的项目一样;但菜单总是被禁用。
所以我从Enabled菜单项的属性绑定到managedObjectContext.undoManager.canUndo / canRedo:当用户对对象进行更改时启用菜单,但无论如何撤消操作无效:菜单保持启用但没有撤消。
获得撤消的唯一方法是断开菜单项与 First Responder 的连接,而是与 AppDelegate 的新 IBActions 建立另一个连接:

以这种方式(以及Enable绑定到canUndoand的属性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 打开它(据我所知,错误在哪里,可能在模板中......)

0 投票
1 回答
340 浏览

cocoa - 面对基于 Cocoa 的 Mac OS X 应用程序的国际化 MainMenu.xib 问题

我在一个基于 Cocoa 的 Mac OS X 项目中工作,并面临一个国际化 MainMenu.xib 的问题。

在菜单项中,所有标题都需要以编程方式进行国际化。除了撤消和重做菜单项标题外,所有菜单项,如“剪切”、“复制”、“粘贴”都可以使用 setTitle 进行国际化。除此之外,在项目表单的文本字段中键入任何内容后,撤消菜单项标题动态更改为“撤消键入”。“重做”也是如此。

我可以使用设置其他菜单的标题和菜单项的标题,

对于 MainMenu.xib “编辑”菜单,类似地,

对于“编辑”菜单下的 NSMenuItem “复制”。

但是如果我使用相同的代码,

menuItem 标题仍保持为“撤消”

NSUndoManager 提供了 undoMenuItemTitle 和 redoMenuItemTitle 方法,但是 NSUndoManager 不会将 -setTitle: 消息发送到“Undo”和“Redo”菜单项。

那么如何跟踪标题的动态变化并使“撤消打字”也国际化呢?

是否可以手动获取 MainMenu.xib 的第一响应者并从中获取 undomanager 对象?这样我就可以使用撤消菜单项解除第一响应者中当前存在的撤消操作并手动执行撤消操作,或者是否可以仅以编程方式更改标题而不执行所有这些操作。

请让我知道是否有人遇到此问题并解决了该问题。

0 投票
1 回答
599 浏览

iphone - NSUndoManager 没有为 iPhone 应用程序的撤消/重做绘图保留重做/撤消堆栈

我正在使用 Objective C 构建一个 iPhone 应用程序。在我的应用程序中,我在图像上绘制笔画并希望实现撤消和重做功能。

我已经用过NSUndoManager这个了。有了这个,我可以在下一级撤消我的绘图,但我的要求是在尽可能低的级别撤消绘图(或至少降低 10 级)。我已经将其设置setLevelsOfUndo为 10,但它不起作用。

我正在使用以下代码:

请让我知道我在哪里不正确。我已经用谷歌搜索了很长时间,但没有找到功能失败的确切原因。