gpt4 book ai didi

iphone - 可以将多个 NSUndoManager 与一个 Core-Data ManagedObjectContext 一起使用吗?

转载 作者:行者123 更新时间:2023-12-03 18:29:01 25 4
gpt4 key购买 nike

//编辑:真的,没有人对此有任何建议或想法吗?我是否以某种方式问错了问题?//

我的 iPhone 应用程序有一个具有中等复杂数据模型的 ManagedObjectContext。我现在正在添加撤消功能,但不清楚如何最好地处理嵌套 View Controller (因为每一层都可能修改数据模型)。

Apple's docs point out: "Consider an application that displays a list of books, and allows you to navigate to a detail view that in turn allows you to edit individual properties of the book (such as its title, author, and copyright date). You might create a new book from the list screen, navigate between two other screens to edit its properties, then navigate back to the original list. It might seem peculiar if an undo operation in the list view undid a change to the author’s name that was made two screens away rather than deleting the entire book."

<小时/>

那么实现这一点的最佳方法是什么?目前,我正在考虑让每个 viewController 保留自己的 undoManager,只要它在屏幕上,它就会处于事件状态。所以我的理解是,这需要以下步骤(对于每个 VC):

  • 添加属性:myUndoManager
  • 添加一个 undoManager 方法,返回 myManagedObjectContext.undoManager;
  • viewDidAppear中:myManagedObjectContext.undoManager = myUndoManager;//如果nil则首先创建
  • viewWillDisappear中:myManagedObjectContext.undoManager = nil;
  • 内存警告:[self.undoManager removeAllActions ];
  • 释放时:self.myUndoManager = nil;
  • 对于每个模型更改:[self.undoManager setActionName:NSLocalizedString(@“XXX”,@“”)];
  • CoreData 将处理实际的撤消/重做发布

此外,我必须保持第一响应者:

  • viewDidAppear中:`[self变成FirstResponder]'
  • 添加返回 YES 的 canBecomeFirstResponder 方法
  • viewWillDisappear中:[self resignFirstResponder];
  • 在 subview 退出时重新启用firstResponder(例如textFields)

到目前为止,即使在加载/卸载周期中,这似乎也有效,并且非常独立,但我有几个问题:

  • 首先,这是跨多个 VC 实现撤消的最佳实践吗?
  • 如果我的子 VC 没有在我执行之前的操作之前撤消他们的操作,我会遇到麻烦吗?
  • 如果是这样,该列表是否包含我需要做的所有事情?
  • ManagedObjectContext 是否会与多个处于事件状态的 UndoManager 混淆?
  • 在交换 undoManager 之前我需要调用 ProcessPendingActions 吗?

最佳答案

我会非常努力地只拥有一个撤消管理器。
考虑一下场景:

型号:(鸡)
属性:鸡蛋、颜色、大小;

型号:(蛋)
属性:鸡肉,颜色;

chicken.eggs = 与 Egg 的一对多关系,egg.chicken 则相反。

您创建 2 个撤消管理器,一个用于 ChickenViewController,另一个用于 EggViewController。
您创建了 Chicken0 及其鸡蛋:egg0、egg1。
您创建了小鸡 1 及其鸡蛋:egg2、egg3。
你删除egg2。

现在你删除 Chicken1 级联,删除鸡蛋。
现在你回到eggViewController并撤消...你想要发生什么(异常会发生)。
现在你撤消chickenViewController和chicken1,它的egg又回来了,但是有2个egg2吗?

编辑我在这个问题上的语气稍微软化了一些假设您使用的是分层 View 结构,例如 UINavigationController,并且每次转到 subview 时都会创建一个新的撤消 Controller ,我不认为您应该遇到问题。

关于iphone - 可以将多个 NSUndoManager 与一个 Core-Data ManagedObjectContext 一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4980620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com