问题标签 [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.
iphone - 在项目详细信息显示屏幕上处理取消编辑的标准方法是什么?
我目前正在开发一个跟踪猫及其相关芝士汉堡的应用程序。我正在使用 Core Data 支持应用程序。猫和它的芝士汉堡之间存在一对多的关系(一只猫可以有零个或多个芝士汉堡)。
我有一个 UITableViewController 按名称(姓氏,名字)显示所有猫。当您单击表格中的一行时,一个新的 UITableViewController 会被推送到导航控制器上,该控制器会显示有关猫的所有信息。对于它的价值,表格视图与第一秒分组,其中包含有关猫的信息(名字/姓氏,颜色等)。然后在第二部分中,描述了猫吃的所有奶酪汉堡。
右侧导航项是编辑按钮。当用户处于编辑模式时,我隐藏了导航栏的后退按钮,将其替换为取消按钮。
我的问题是:是否有关于如何处理在编辑屏幕中管理数据的标准/常见做法/等?我看到它发生在以下两种方式之一:
- 跟踪用户更改的所有内容,然后当他们点击
done
按钮时,将这些更改复制到Cat
NSManagedObject
. - 使用与
NSUndoManager
关联的,NSManagedObjectContext
并且当用户开始编辑时,创建一个新的撤消分组。当他们点击取消按钮时,只需结束分组,然后在NSUndoManager
.
我觉得选项 2 似乎最实用,但我对它的感觉很复杂。对于 iPhone,NSManagedObjectContext
默认情况下没有NSUndoManager
与之关联的 - 我读过它适用于 OSX 应用程序。NSManagedObjectContext
在网上阅读时,我也没有看到太多关于使用与iPhone 编程相关的讨论。这让我觉得人们可能正在使用另一种我没有想到的方法。
ios - 在运行循环的旋转中使用核心数据撤消组
我正在尝试设置一个撤消组,该组跨越在平移手势识别器期间发生的所有更改。被修改的对象是来自 Core Data 的 NSManagedObjects。
当手势进入“开始”阶段时,代码启动撤消组并关闭按事件分组。在“结束”和“取消”阶段,组结束并重新打开按事件分组。
在识别器的每次“更改”时,都会更新相同的核心数据对象。随后,Core Data 为该特定更改创建一个新的撤消组。
有什么办法可以获得核心数据来阻止它?或者我是否需要更改在这种情况下处理撤消的方式?
我这里有一个示例项目,其中包含 BBQMainViewController.m 的 handlePanGesture: 方法(第 82 行)中的相关代码。该项目在每次更新识别器时将撤消堆栈打印到控制台。如您所见,撤消堆栈构建和构建。如果您注释掉第 168 行,撤消堆栈不会建立。
objective-c - 检测 NSUndoManager 的警报视图何时可见
我将描述我一般要做什么(以防有更好的方法),然后是我遇到的绊脚石(以防我的方法是最好的方法)。
我想要做什么:我想向我的撤消管理器添加一个有时间限制的调用。如果在时限内没有触发撤销,那么在摇晃设备时撤销将无效,因此不会发生任何事情。
我在做什么:我的方法是使用 anNSUndoManager
和NSTimer
. 当我将调用添加到撤消管理器时,我也启动了一个 5 秒计时器。当计时器触发时,它会检查!self.undoManager.isUndoing
是否为真,然后继续并从撤消管理器中删除所有操作。在模拟器中对其进行测试是有效的:摇动手势会在 5 秒之前启动撤消,但不会在之后。
问题是,如果我在 5 秒限制下得到一个摇动手势,撤消管理器会显示警报,但是如果用户等到 5 秒限制之后才真正点击撤消按钮,则什么也没有发生:计时器很高兴地清除了堆栈,即使警报视图可见。
有没有办法检查警报视图是否可见?最好是如果我能弄清楚用户是否也点击了撤消或取消,并在按下取消按钮时清除撤消管理器的操作堆栈。
或者除了以这种方式使用计时器之外还有更好的方法吗?
谢谢!
编辑添加:我的另一个想法是自己(通过motionEnded:withEvent:
调用)捕获抖动事件并手动管理警报和撤消堆栈。与上述相比,对此的想法也值得欢迎。
ios - 核心数据和 NSUndoManager - 带撤消的删除/插入顺序
我有一个由多个图层(托管对象)组成的图像,每个图层都由一个视图表示。当我清除这些层时,我从前到后删除它们,期望撤消以相反的顺序从后到前恢复它们,因此也从后到前创建它们的视图,给我正确的顺序。但是,恢复层(托管对象)的顺序似乎是随机的。有没有办法确保以与删除图层相反的顺序重新插入图层(因为撤消通常是一个堆栈,这是我所期望的)。
请注意,所有图层删除都发生在单个撤消分组中,所以它不像我多次点击撤消按钮,它都在一个撤消调用中。
请注意,删除其中一些层可能会导致其他对象从级联中删除,所以这可能也会影响它吗?
编辑:要注意切换 for 循环的顺序不会改变图层恢复的顺序。
objective-c - 将 NSUndoManager 与 prepareWithInvocationTarget、手势和对象一起使用
我有一个绘图应用程序。我想实现撤消/重做。尽管我在存储撤消/重做的原始值和新值时遇到了困难。
使用手势我需要存储一些东西:变换、居中、属性对话框,我需要存储更多、颜色、字体、字体大小、轮廓、轮廓颜色、文本本身等。
我创建了一个NSMutableDictionary
用户可以在单个手势/属性弹出窗口中更改的属性。
我想使用Rob 的答案NSUndoManager
和旋转手势,尽管使用他的解决方案与 一起使用CGAffineTransform
,当作为参数发送时 prepareWithInvocationTarget
,它不是对象,只是将CGAffineTransform
结构的副本放在撤消/重做堆栈上。
虽然在使用prepareWithInvocationTarget
我NSMutableDictionary
传入的字典时(OriginalAttribs,newAttribs)不会保留。我不能将它们作为本地 iVar,因为它们会随着绘图对象上的每个动作而改变。
似乎我想retainArguments
用作其中的一部分,NSInvocation
但我真的不想保留它们。我需要他们的副本。
它的手势使这变得困难,因为我无法继续设置 OrigianlCenter, OriginalTransform,因为它在手势处于活动状态时会发生变化。
更新 我找到了这个链接,它似乎与我想做的类似。
我像这样设置我的 NSUndoManager:
然后我得到一个运行时错误:
undoAttributesWithOriginalAttributes:newAttributes:
是我为我的 NSInvocation 对象设置的选择器。根据这里的文档,它说它应该将它传递给自我(目标),而不是撤消管理器自我?
xcode - 向核心图形绘制应用程序添加撤消/重做方法
我正在尝试使用 NSUndoManager 实现撤消/重做方法。我已经对此提出了其他问题,但仍然卡住了。
我现在的位置如下:
[undoManager setLevelsOfUndo:99]; viewdidload:
我得到“那没有用”......
我会很感激帮助。当我弄清楚我做错了什么时,我会发布我原来问题的答案。
- -编辑 - -
我已将 resetTheImage 更改如下:
但是,混乱下雨了——如果有人(布拉德?贾斯汀?)可以提供一个项目符号列表,列出我需要采取哪些步骤来完成这项工作,这可能会有所帮助。例如:
. 在...中添加通知。触发通知...... 让撤消/重做按钮指向...。我真正需要构建哪些方法/功能......
我希望 SO 能让我给你的分数超过 1..
(我的“o”键变得不稳定并没有帮助)昨天我有一个小孙女确实有帮助:))))
objective-c - Core Data undoManager 崩溃
我将以下代码用于核心数据单例。下面是我的代码。(基于 NachoMan 的博客。但是代码来自他的要点。
但是,managedObjectContext
如果我添加
它会崩溃。
Crittercism日志显示
SIGBUS
主要 (main.m:16)
当很多SO帖子说要使用它时,为什么这两条线会崩溃?如果我把这两条线去掉,它就不会崩溃,我只是无法使用撤消管理器。
iphone - 重置撤消/重做数组 iOS
我想使用 NSUndoManager 撤消和重做绘图应用程序中的笔触和更改。我使用 UIGraphicsGetImagefromCurrentImageContext() 将图像存储到可变数组中。
我下面的代码给出了一个想法:
我如何以及在什么时候清除 layerArray 并重置撤消堆栈?提前致谢
objective-c - 如何将 undoManager 与核心数据实体一起使用
我有一个名为 NSManagedObject 的对象appointment
,我编辑了它的属性。如果我用户按下取消,我想撤销所有这些编辑。
如果我这样做(示例代码)
beginUndoGrouping
它不应该撤消和之间的所有更改endUndoGrouping
吗?似乎有很多方法可以做到这一点,但我似乎找不到正确的方法。撤消更改的正确方法是NSManagedObject
什么?
nsmutablearray - 如何撤消和重做手势处理
我写了一个没有核心数据的应用程序。现在我想包含在没有核心数据的情况下实现撤消和重做的方法。
不幸的是,我在互联网、书籍等上一无所获。
我认为我有两个 NSMutableArray 应该具有堆栈的功能。
所以我称它们为 undoStack 和 redoStack。如果我做手势之类的动作,这个动作应该保存在数组中:
[undoStack addObject:gestureRecognizer];
如果我单击按钮撤消,应执行以下语句:
[undoStack removeObject: [undoStack lastObject]]; 和
[redoStack addObject: [undoStack lastObject]];
最后我有一个保存按钮,它会自动清除堆栈
这一切都很好,但是如何将所有操作保存在一个数组中?
动作如:panGesture、pinchGesture 和 rotationGesture
先感谢您