【问题标题】:undo all changes made in a view controller撤消在视图控制器中所做的所有更改
【发布时间】:2012-05-11 03:13:09
【问题描述】:

是否可以撤消视图控制器中所做的所有更改而不影响其父视图控制器中所做的更改?顺便提一句。它们具有相同的 managedObjectContext。附言。我有两个实体 A 和 B。A 与 B 有一对多关系。视图控制器 VCA 用于在 A 中执行一些更改。视图控制器 VCB 用于在 B 中执行一些更改。VCA 是 VCB 的父视图控制器.

【问题讨论】:

  • 你能澄清一下你说的是什么类型的变化吗?您要更改哪些数据,它保存在哪里?

标签: iphone ios core-data nsmanagedobjectcontext nsundomanager


【解决方案1】:

无需创建新的上下文。当您离开子视图控制器时,您可以选择任一

[managedObjectContext save:&error];

[managedObjectContext rollback];

在后一种情况下,您的所有新实体实例、数据修改等都将被丢弃。

【讨论】:

  • 回滚将撤消上下文中的所有更改。当父子视图控制器在同一上下文中时,它无法辨认。
  • 没有。它回滚自上次保存以来的所有更改。您所要做的就是在启动子视图控制器之前保存。
  • 但是当我回到父视图控制器时,保存的更改无法撤消。
  • 是的,只有父视图控制器中保存的更改。如果您希望将其反转,请不要在此之前保存。
  • 我可以对子视图控制器中的更改进行分组并撤消组中的所有更改吗?
【解决方案2】:

您应该为子视图控制器创建新的 NSManagedObjectContext 并将撤消附加到它。 NSManagedObjectContext 非常轻巧,成本也不高。

【讨论】:

  • 是的,这是一个解决方案,但是我必须将管理 obj 从一个上下文复制到创建的上下文。
  • 不是复制,而是传递它的objectId。我认为您没有其他解决方案。
  • 当我将子对象 B 添加到父对象 A 时,它不起作用,因为它们不在同一个上下文中。我应该先将 B 上下文中的更改复制到 A 上下文中吗?这个问题还有其他解决方案吗?
猜你喜欢
  • 2012-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多