如何在 iOS 上的 Core Data 中设置新创建的关系?

Posted

技术标签:

【中文标题】如何在 iOS 上的 Core Data 中设置新创建的关系?【英文标题】:How can I set up a newly created relationship in Core Data on iOS? 【发布时间】:2010-11-04 19:01:11 【问题描述】:

所以我在现有的 iPhone 应用程序中使用 Core Data,并设置了两个实体:Person 和 Item。我的应用程序导航的根视图(当前)显示人员列表,您可以从那里向下钻取到项目。简而言之,层次结构如下所示:

人物 -> 物品

我想在层次结构中的 Person 上方添加一个新实体,称为 List:

列表 -> 人物 -> 项目

此外,我希望在启动时为他们创建用户的第一个列表,并为用户已添加的任何人分配到该列表。

我熟悉 Core Data 的轻量级迁移和版本控制功能,所以我想我知道如何添加新实体和关系,但我不知道如何:

    如果他们之前从未使用过列表功能,则在应用启动时创建列表记录

    将所有现有人员记录设置为属于该新列表。

一种快速而肮脏的方法是向我的应用程序委托的 applicationDidFinishLaunching 方法添加一些代码,该方法通过 (1) 检查是否有任何列表,(2) 如果没有,则创建默认列表,(3 ) 从我的数据存储中获取所有现有的人员,(4) 将每个人员的列表属性设置为新创建的默认列表,最后 (5) 保存这些更改。

我的问题是:有没有更快或更简单的方法来完成这一切?

【问题讨论】:

【参考方案1】:

这几乎就是您想要做的。使用NSFetchRequest 查看是否存在任何Listss。如果没有,请创建一个。然后再次请求获取所有Persons。在这里,我将创建一个包含所有Persons 的NSSet 并将其分配给Listpeople 属性,而不是分配每个Personlist 属性。你确实创建了一个逆属性,对吧?

这实际上是一个非常轻量级的操作,全部收费,所以我不会太担心性能。除非您有成百上千个 Person 对象,否则您的用户可能根本不会注意到。

【讨论】:

好主意,我会这样尝试。谢谢!

以上是关于如何在 iOS 上的 Core Data 中设置新创建的关系?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Mac 应用程序中设置初始 Core Data 存储?

禁用时在某个活动中设置新的ActionBar

在 java、dom、xml 解析中设置新节点值的问题

使用 docker 客户端在 python 中设置新容器时权限被拒绝错误

使用 iTextSharp HTMLWorker (html to pdf) 在 HTML 中设置新页面

从不同数据框中设置新的多索引列的方法