问题标签 [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 投票
0 回答
1068 浏览

ios - 将上下文保存在核心数据中后,我可以撤消操作吗?

我有一个通用的 iOS 核心数据应用程序。每次更改某些内容时,我都会从 NSManagedContext 调用 save,因此所有更改都会移动到数据库中。

据我了解,我只能撤消托管上下文中的更改,但不能撤消数据库中的更改。我对吗?

我想要的是立即将所有更改提交到数据库并能够撤消 las 操作。那可能吗?

我看到的唯一选择是不提交最后一次更改,也就是说,将最后一次更改保留在 NSManagedContext 中,这样我就可以撤消该更改。但是这个想法有一个问题,如果程序崩溃或用户进行了备份(使用 iTunes 或 iCloud),那么最后的更改就会消失。你是否同意我的观点?我怎样才能让我的数据始终提交到数据库中,同时有可能撤消最后一次更改?据我了解,使用 Core Data 是不可能的。我希望我错了。

好吧,我想知道你对此的看法。谢谢。

0 投票
1 回答
398 浏览

ios - 显式设置 NSUndoManager 的重做调用

我有一个应用程序,它允许用户上下移动 UIViews,让外观一个视图可以位于另一个视图之上。通过使用exchangeSubviewAtIndex方法更改超级视图中 UIView 的索引,更改 UIView 的“级别”(父子视图中的索引)非常简单。

现在,我使用 NSUndoManager 来记录更改,以便用户可以撤消下移操作。这工作正常。尝试在 NSUndoManager 上执行重做消息时会出现问题。由于正在移动的 UIView 上没有“ZIndex”状态(因为它是其父视图中的一个位置),因此重做不会做任何事情......

有没有办法明确传递重做的重做调用?

0 投票
1 回答
1473 浏览

iphone - NSUndoManager 以及如何让重做工作

我有一个应用程序,我想在每次更改之前保存项目的当前状态,以便撤消和重做能够在这些状态中来回切换。当我进行更改时,保存位置的代码是:

还有我的撤消/重做功能:

replace self 函数只是获取项目状态属性并分发信息以便恢复状态。

撤消效果很好,我可以执行 5 个步骤,然后按 5 次撤消以倒回开始,但重做什么也没做!不应该调用重做导致它用最后一个被撤消的对象击中我的选择器吗?我在这里有什么误解?

0 投票
1 回答
191 浏览

objective-c - Core Data 撤消管理是否在应用程序重新启动时起作用?

我一直在使用 Core Data。我正在写一个纸牌游戏,我能够存储和检索游戏统计数据。我还在每次移动后存储游戏的状态,以允许应用程序在应用程序退出时恢复正在进行的游戏,并促进我的自制撤消系统。

不幸的是,我玩游戏的时间越长,感觉就越慢。我认为这是因为每次移动后我都会在 SqlLite 中存储 52 张卡片及其特定状态。我怀疑我塞进数据库的数据越多,这就越慢。

因此,我打算尝试使用 Core Data 中内置的撤消管理。(我不记得这是在那里,直到我最初的实施为时已晚。)我的问题是,如果应用程序在游戏中途关闭,是否可以在相同状态下使用撤消管理重新启动它?

IE:想象一个用户在这个游戏中做了十步。他们将能够撤消十次。如果他们退出应用程序并完全关闭它然后重新启动应用程序,我可以将 Core Data 恢复到用户仍然可以执行十个撤消步骤的状态吗?

一些研究表明,当应用程序关闭时,我可以简单地使用 NSCoding 将 NSManagedObjectContext 持久化到序列化文件中,然后在应用程序重新启动时从该文件恢复它的状态。

我在正确的道路上吗?有什么建议么?

谢谢!

0 投票
1 回答
959 浏览

objective-c - NSUndoManager 处于无效状态

通读 Aaron Hillegass的书Cocoa Programming for Mac OS X(第三版) 我现在在第 9 章,在第 1 节的末尾Adding Undo to RaiseMan。Hillegass 告诉您向您的类添加两个方法MyDocument,然后构建应用程序以查看添加的撤消/重做并正常工作。

但是,它不起作用(为什么我会在这里?)。它说:

当我单击撤消或按 cmd+z 时,在控制台中。

我在网上找到了解决方案,但它们都是关于“UndoGroups”或类似的东西。
我知道例外是关于nested undo groups,但我不使用它们(AFAIK),我什至不知道它们是什么。

我不知道我应该提供什么其他信息,所以请在评论中询问代码片段等。

0 投票
1 回答
501 浏览

nested - 使用 NSUndoManager 嵌套重做组

假设我有两个原子对象方法operation1operation2它们将自己的撤消操作注册到undoManager. 如果我进行 bulk operation3,它将调用前两个操作并将撤消回调与 分组beginUndoGrouping/endUndoGrouping,撤消时,NSUndoManager不会对重做操作分组。如何将NSUndoManager地图撤消组变为重做组?

示例代码:

0 投票
1 回答
206 浏览

ios4 - 是否可以在没有 Core Data 的情况下使用 NSUndoManager?

我创建了一个没有核心数据的应用程序。该应用程序具有许多功能,例如使用手势、颜色和文本操作视图。

我想要做的是使用撤消和重做功能。
我阅读了有关 Core Data 和 NSUndoManager 的所有内容,但我无法理解它,因为我尝试做的所有事情......都行不通。

我的问题是:是否可以在没有 Core Data 的情况下使用 NSUndoManager?
并且:我怎样才能实现视图的撤消?

一个操作可以改变我的对象叫做 aView (UIImageView) 我在 undoManager 中注册了信息

编辑

此处描述了单击按钮调用的撤消方法:

如果我插入一个 if 子句询问是否 undoManager.canUndo == YES,它会返回 undoManager 不能撤消。
这意味着 undoManager 为 nil,但为什么呢?我错过了什么?

0 投票
1 回答
265 浏览

macos - 将 NSDocument 的 changeCount 链接到 NSTextView

有没有办法以某种方式将NSDocument's链接到用于文档changeCount的唯一文件?NSTextView

或者我必须实现所有必要的NSTextViewDelegate方法并changeCount自己更新?

0 投票
1 回答
684 浏览

objective-c - NSUndoManager 会撤消后台发生的更改吗?

我有一个编辑视图控制器,我正在使用一个 NSUndoManager,它是我的持久性存储(核心数据项目)的集合。

我的应用程序的功能之一是与外部服务器同步。我想知道的是,如果我在视图中编辑某些内容,同时应用程序正在与服务器同步,如果我改变主意并决定撤消当前编辑中的任何更改,它是否也会撤消如果在撤消分组开始时进行了同步期间所做的所有更改,还是只会撤消我自己所做的更改?

0 投票
2 回答
388 浏览

nsundomanager - 如何避免 NSUndoManager 中的空撤消组?

我在我的 undoManager 撤消/重做堆栈中得到了空的撤消/重做组。因此在许多情况下将 canUndo/canRedo 设置为 TRUE。如何避免这种情况?