问题标签 [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.
ipad - UIPopover 防止摇晃撤消
我有一个允许在各种情况下输入文本的应用程序。当文本输入到 UIPopover 内的 UITextView 或 UITextField 时,摇动撤消不起作用。摇晃设备(或模拟器)时,不会出现询问您是否要撤消的 UIAlertView。
如果我有 UITextFields 不包含在 UIPopovers 中,请摇动以撤消按预期工作。
当文本输入字段位于 UIPopover 中时,什么可能会阻止摇动撤消工作?
我的部署目标是 iOS 5.1
objective-c - 带有块的 NSUndoManager
在我期望支持块的所有事情中,奇怪的是,NSUndoManager 似乎并没有这样做。这是否有一些内在的原因,或者 Apple 根本没有着手对这部分 API 进行现代化改造?
特别是我想在 NSObject 上定义一个方法,
为了能够打电话,
我错过了什么吗?这有什么问题吗?
(受 2009 年 Mike Ash 的一篇文章启发,该文章建议不要在块上定义方法。我也在那里发表了评论。)
ios - CoreData 使用 NSUndoManager 抛出异常
我有一个 iPad 应用程序,我在其中使用 NSUndoManager 和 Core Data。事情通常运作良好,除了当我多次撤消/重做时有一个半可重现的错误。我只在主线程上工作(至少,我已禁用 MagicalRecords 在辅助线程上使用 NSManagedObject。如果我尝试撤消/重做 NSManagedObject 到上下文的插入,问题总是会发生。
所以我有这样的事情:
几次之后,我得到以下异常。它发生在辅助线程上,这让我觉得 Core Data 正在后台做一些事情。
有时我也会得到 EXEC_BAD_ACCESS,其他时候只是上面的异常。
知道是什么原因造成的吗?
编辑:澄清了 Mundi 的情况(见评论)
multithreading - 当更改总是在临时子上下文中完成时撤消核心数据中的更改
我的 Mac 应用程序设置为始终在主线程之外对其模型进行更改,如下所示:
- 在单独的线程中进行更改(具有自己的上下文)
- 在后台保存,它将更改推送到主线程中的父上下文
- 发布通知以触发 UI 更新
- 线程退出
这很好用,但现在我想为我所做的更改启用撤消。我该怎么做?我只看到两个同样糟糕的选择:
- 我保留子上下文,因此保留它的撤消管理器,以防用户想要撤消。这将限制我可以进行的撤消次数,因为为了撤消而手动保留一堆上下文似乎很奇怪。
- 或者,我可以将子上下文的撤消管理器设置为父上下文的撤消管理器吗?这样应用程序中将始终只有一个撤消管理器。这听起来也是错误的,因为托管对象不应该在不同的线程之间共享。
有没有人有任何想法?
谢谢。
uitextview - UITextView 撤消管理器不适用于替换属性字符串(iOS 6)
iOS 6 已更新为使用 UITextView 进行富文本编辑(UITextView 现在获得了属性文本属性——这是愚蠢的不可变的——)。这是在 NDA 下在 iOS 6 Apple 论坛上提出的一个问题,由于 iOS 6 现已公开,因此可以公开...
在 UITextView 中,我可以撤消任何字体更改,但不能撤消视图属性字符串副本中的替换。使用此代码时...
...撤消效果很好。
但是,如果我添加一行以使结果在我的视图中可见,则 undoManager 不会触发“replace:with:”方法,因为它应该......
任何想法?对于我尝试在“2”行使用的 MutableAttributedString 的任何替换方法,无论是否使用范围,我都有同样的问题......
uitextview - 在富 UITextView (iOS 6) 中使用 NSUndoManager 撤消操作
我想更改富 UITextView (iOS 6) 的部分或全部属性文本,并允许用户撤消更改。
阅读NSUndoManager 文档后,我尝试了第一种方法:
我希望撤消操作很简单:
声明此方法:
通过调用更改我的 UITextView 中的文本:
但是在这样做之后,NSUndoManager 说它无法撤消。
所以我尝试了第二种方法:
声明:
并更改文本:
之后,NSUndoManager 也表示无法撤消。
为什么?
请注意,当触发将更改属性文本的代码时,用户正在编辑 UITextView。
一种解决方法是直接通过 UITextInput 协议方法替换文本。下面的方法还是挺方便的,但是我还没有找到 NSAttributedString 的等价物。我错过了吗?
这里建议的 hack 是模拟粘贴操作。如果可能的话,我宁愿避免这种情况(还没有理由,只是觉得太脏了,以后不回来咬我)。
objective-c - Core Data UndoManager 发送奇怪的 NS
我正在开发的应用程序允许用户管理一些资产。用户可以在屏幕上创建/删除/编辑/拆分/移动资产。用户需要能够撤消所有这些步骤。
资产是用核心数据管理的(是的,undoManager
是实例化的)。
对于这些操作中的每一个,我都使用这对创建撤消分组:
我对编辑做同样的事情:如果用户取消编辑,那么我在endUndoGrouping
.
一切都很顺利,只有一个例外:除了我创建的组之外,Core Data 还创建了其他一些我无法控制的组。这就是我的意思:
我注册接收 NSUndoManagerDidCloseUndoGroupNotification 通知,如下所示:
我使用这些通知来刷新撤消按钮并显示由于某些操作而被撤消的操作的名称:例如 Undo Split
然而,didCloseUndoGroup
对于上面的每个操作(例如第 1 节,在 endUndoGrouping 之后)被调用/通知两次:
在第一次通知时,self.managedObjectContext.undoManager.undoActionName
包含我设置的撤消操作名称,这是我所期望的,而第二次undoActionName
是一个空字符串。
作为一种解决方法,我尝试简单地撤消名称为空的操作(假设它们不是我的并且我不需要它们),并查看我是否遗漏了任何东西。
现在,didCloseUndoGroup
看起来像这样
它神奇地起作用,我可以使用“撤消”撤消任何命令,任何数量的层。但这不是它应该工作的方式......
在此之前我尝试过的其他几件事:
- [self.managedObjectContext processPendingChanges] 在打开任何分组之前。它仍在发送两个通知。
- 我尝试的另一件事是 disableUndoRegistration / enableUndoRegistration。这产生了一个异常:“无效状态,使用太多嵌套撤消组调用撤消”
以上都没有帮助我“隔离”我之前提到的神秘群体。
我不应该收到两次 NSUndoManagerDidCloseUndoGroupNotification 通知。或者,我应该吗?有没有更好的方法来处理这种情况?
更新 这是最终奏效的。以前,我一收到通知就会自动撤消无名组。这就是导致问题的原因。现在,我撤消所有操作,直到到达我的目标组,然后对该组进行最后一次撤消。
“undoManagerHelper”只是一个堆栈管理系统,它为每个压入堆栈的命令生成一个唯一的 ID。我使用这个唯一的 ID 来命名该组。
objective-c - 在块内使用 NSUndoManager
我试图向块代码添加一些撤消/重做(从 NSOpenPanel 导入一些文件),只要代码源自块,主代码就可以工作,但 NSUndoManager 代码不会保存并且不会给出任何错误。NSUndoManager 代码在其他任何地方都可以工作,只要它不在块中
示例 NSUndoManager 代码如下:
下面显示了代码在哪里起作用和不起作用:
objective-c - NSUndoManager 反复调用我的“恢复”方法
我有一个UITextView
带有格式的工具栏。在我按下“粗体”按钮后,它会更改文本/选择并将操作注册到文本视图的NSUndoManager
.
当您尝试撤消时,restoreText:
会一遍又一遍地调用,直到您杀死应用程序
一些示例代码:
和控制台:
我[self.textView.undoManager isUndoing]
在注册调用之前尝试过检查restoreText:withRange:
,但是崩溃了:
此代码在 iOS5 上运行,但在 iOS6 上停止运行。我已经向 Apple 提交了一个错误,但我不确定我是否做错了什么
cocoa - NSUndoManager 是否保留其参数?
以下是 Aaron Hillegas 的书 cocoa programming for OS X 中启用撤消的代码:
在删除员工时,我们将命令推送到撤消堆栈以将该员工重新插入到数组中。但是有什么保证 p 在调用 undo 时不会被释放?