当 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 允许新对象时如何处理取消的主要内容,如果未能解决你的问题,请参考以下文章