当 UI 允许新对象时如何处理取消

Posted

技术标签:

【中文标题】当 UI 允许新对象时如何处理取消【英文标题】:How to handle cancel when UI allows new objects 【发布时间】:2015-01-08 22:28:32 【问题描述】:

相当标准的 ios 应用程序,其中视图允许用户创建新实体。在我的例子中,视图与一个父实体和 N 个潜在子实体相关联。

目前,当 UI 启动时,会在默认(主线程)MOC 中创建一个新实体。如果用户添加了孩子,他们也会被扔进那个 MOC。毕竟,如果用户决定点击取消,我必须通过 MOC 并删除父级和所有子级。

更糟糕的是他们编辑现有实体的情况。如果他们进行更改,我必须尝试将实体更改回来。

我认为有更好的方法,但我不确定这样做是否可以。

使用 MagicalRecord,我可以创建一个新的 MOC(背景),用于创建/编辑视图的实体。在保存的情况下我可以保存 MOC,在取消的情况下我可以扔掉 MOC。

我主要关心的是在 MagicalRecord 中创建一个新的 MOC:

NSManagedObjectContext *context = [NSManagedObjectContext MR_context];

确实在后台线程上创建 MOC。将 MOC 与在主线程上运行的 UI 结合使用时会出现问题吗?

编辑:

安迪是正确的,这是正确的方法。以防万一有人想知道在 MagicalRecord 中执行此操作的方法是:

NSManagedObjectContext *tempContext = [NSManagedObjectContext MR_newMainQueueContext];
tempContext.parentContext = [NSManagedObjectContext MR_defaultContext];

【问题讨论】:

【参考方案1】:

这是我使用子上下文的确切场景(不是非常流行的异步数据导入,如果您需要合并客户端和服务器数据,我发现它们往往是一个糟糕的选择,并且无论如何都要经过主线程来保存)。

您只需创建一个没有持久存储协调器的新主队列上下文,将其parentContext 属性设置为您的主上下文,然后像处理任何其他上下文一样使用它。如果用户按下取消,什么也不做——只要让上下文消失,对象就会随之消失。如果用户按下保存,只需保存上下文,更改就会推送到您的主上下文。

我对 MagicalRecord 不够熟悉,无法说明是否有某种方便的方法来创建适当的上下文,但没有它就足够简单了。

【讨论】:

非常感谢!我更新了问题以展示如何在 MagicalRecord 中做到这一点。

以上是关于当 UI 允许新对象时如何处理取消的主要内容,如果未能解决你的问题,请参考以下文章

开始Skype通话时如何处理UI?

JWT:当用户打开新标签时如何处理 GET 请求?

JWT:当用户打开新标签时如何处理 GET 请求?

GC时如何处理对象引用

需要 iCloud 时如何处理首次启动体验?

如何处理位置服务弹出警报上的“取消”按钮