UI 允许新 objects 时如何处理取消

How to handle cancel when UI allows new objects

非常标准的 iOS 应用程序,其中的视图允许用户创建新实体。在我的例子中,视图与一个 parent 实体和 N 个潜在 children.

关联

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

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

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

使用 MagicalRecord,我可以创建一个新的 MOC(背景),用于 create/edit 视图的实体。如果save我可以保存MOC,如果cancel我可以直接扔掉MOC

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

NSManagedObjectContext *context = [NSManagedObjectContext MR_context];

确实在后台线程上创建了 MOC。将 MOC 与主线程上的 运行 UI 结合使用时,这是一个问题吗?

编辑:

Andy 说的对,方法对。以防万一有人想知道在 MagicalRecord 中执行此操作的方法是:

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

这正是我使用子上下文的场景(不是很流行的异步数据导入,我发现如果您需要合并客户端和服务器,它们往往是一个糟糕的选择任何数据,而且必须通过主线程才能保存。

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

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