TabBar iphone 应用程序中的 CoreData 和 Shared ManagedobjectContext

Posted

技术标签:

【中文标题】TabBar iphone 应用程序中的 CoreData 和 Shared ManagedobjectContext【英文标题】:CoreData and Shared ManagedobjectContext in TabBar iphone app 【发布时间】:2010-07-20 08:26:26 【问题描述】:

我,在 coredata iphone TabBar 应用程序上工作并将 appdelegate managedObjectContext 传递给所有视图和子视图。在某些情况下,我需要为实体 A 创建新记录,而实体 A 没有被用户保存,我需要创建另一个实体 B 使用相同的共享上下文。现在,我的问题是如果我保存实体 B 的上下文,那么它也会保存实体 A。我不想保存实体 A,直到或更少的用户不想保存它。

我只能看到一种方法是为实体 B 或其他东西创建单独的上下文......?

请帮我解决这个问题。

谢谢,

【问题讨论】:

【参考方案1】:

你可以:

    使用单独的上下文。亲:做你想做的事。缺点:增加了复杂性,您无法轻松建立关系。 通过在插入对象时为上下文传递一个 nil 值,在 nil 上下文中创建对象 A。然后在要保存时将其添加到上下文中。亲:做你想做的事。缺点:与上面相同,并放弃上下文提供的所有功能,例如撤消支持。 只需删除对象-A 是用户决定他们不想保留的。优点:简单安全。缺点:对象图中的关系必须允许删除对象 A,即您要保留的其他对象不能要求对象 A 存在。在设计模型时必须牢记这一点。

我几乎总是选择 (3)。这是迄今为止最简单、最安全的方法。由于它模仿了用户实际在做什么,即创建一个数据对象然后决定将其丢弃,这也是一种很好的设计实践。

【讨论】:

感谢您的帮助。我理解您的建议,但在我的情况下,我需要提供查找并允许用户在为对象 A 添加新记录时即时添加新的相关实体。正如我之前提到的,对象 A 是主表包含其他子表引用.因此,在主表 A 中添加新记录时,用户应该能够选择子表记录,并且如果不存在也能够创建新记录。我的问题是首先我正在创建新的对象 A,然后允许用户动态添加新的子对象 B。为此,我发现解决方案 1(单独的上下文)适用于我的情况。

以上是关于TabBar iphone 应用程序中的 CoreData 和 Shared ManagedobjectContext的主要内容,如果未能解决你的问题,请参考以下文章

iPhone编程中的标签栏?

iPhone 6 Simulator,iOS 8 上奇怪的 TabBar 背景问题

如何在 iPhone 上设置第一个以编程方式选择的 TabBar

如何将 TabBar 添加到基于 NavigationController 的 iPhone 应用程序

Iphone:是不是可以隐藏 TabBar? (iOS 8 之前的版本)

iPhone 6+ 状态恢复与主拆分视图中的标签栏