0

我一直在尝试调试这个 2 小时,必须睡觉。首先,我用他们的关键字搜索并发现了许多类似的帖子:许多实体相同类型,而这个: 核心数据:两个具有相同类型的关系的反向关系

但无济于事。这是发生了什么:我有一个有两种类型的数据模型。例如,我有一个人,那个人可以有 4 个电子邮件列表。电子邮件类型是它自己的东西,所以我让 person 为每个列表存储 4 个不同的集合(关系)。

基本上,当我检索一组时,它会抓住所有这些。现在所有 4 个列表都是 1,我如何设置倒数似乎并不重要。实际上,这些更改以某种方式导致整个东西不保存任何东西,下载时所有 nil 对象。在此之前,它工作得很好(除了将所有 4 个列表推到一组之外)。我更新的只是关系的数据模型。我可能以错误的顺序导出了文件,但不知道这是否相关。

我根本找不到关键字组合来查找是否有人以前问过这个问题。我不明白它怎么会出现,我正在做的是基本的抽象。我一直在想我忽略了一个盒子。

总而言之,我有一个人,一个人有 2 个列表。我添加它们类似于: person.friendEmailsList = updatedEmailsFromFriends; person.businessEmailsList = 下载的商业电子邮件;

所以后来,我访问 person.friendEmailsList (当然,使用正确的核心数据调用),而不是只得到朋友,我得到了一切......朋友,企业一切

任何建议,将不胜感激

4

1 回答 1

2

有两种可能的解决方案。

首先,您可以使用您使用的方法。只需确保您还具有来自其他实体的相应反向关系。因此,如果您与同一个实体有 2 个关系,则该实体需要返回 2 个不同的关系。例如

Person.friendsLists --->> List
Person.businessLists --->> List

List.friendPerson ---> Person
List.businessPerson ---> Person

更灵活的方法是让列表有一个额外的属性type(可以是某种数字enum)。

typedef enum {Friend = 1, Business } ListType;

你可以把它放到你的List.h文件中。现在,要访问好友列表,您可以这样做:

NSSet *friendList = [person.lists filteredSetUsingPredicate:
       [NSPredicate predicateWithFormat:@"type = %@", @(Friend)]];

这可能有点多,因此您可以通过将访问器方法放入您的 Person.m 来简化(在 .h 中声明它):

-(NSSet*)friendsLists {
    return [person.lists filteredSetUsingPredicate:
       [NSPredicate predicateWithFormat:@"type = %@", @(Friend)]];
}

现在您可以使用通常方便的方式访问列表person.friendsLists

于 2012-11-27T10:24:46.567 回答