Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Core data 保存具有多个不同关系的同一类型的各种核心数据实体?_Core Data - Fatal编程技术网

Core data 保存具有多个不同关系的同一类型的各种核心数据实体?

Core data 保存具有多个不同关系的同一类型的各种核心数据实体?,core-data,Core Data,我已经试着调试了两个小时了,我得睡觉了。首先,我搜索并找到了许多类似的帖子,它们的关键词是:许多实体都是相同类型的,而这一个: 但是没有用。下面是正在发生的事情: 我有两种类型的数据模型。例如,我有一个人,这个人可以有4个电子邮件列表。电子邮件类型是它自己的东西,所以我让这个人在每个列表中存储4个不同的集合(关系) 基本上,当我检索到一个集合时,它会抓取所有集合。所有4个列表现在都是1,我如何设置反转似乎并不重要。实际上,这些更改不知何故导致了整个东西没有保存任何东西,下载时所有对象都为零。在

我已经试着调试了两个小时了,我得睡觉了。首先,我搜索并找到了许多类似的帖子,它们的关键词是:许多实体都是相同类型的,而这一个:

但是没有用。下面是正在发生的事情: 我有两种类型的数据模型。例如,我有一个人,这个人可以有4个电子邮件列表。电子邮件类型是它自己的东西,所以我让这个人在每个列表中存储4个不同的集合(关系)

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

我根本找不到关键字组合,无法找到以前是否有人问过这个问题。我不知道它怎么会不出现,我所做的是基本的抽象。我一直认为我忽略了一个盒子

总而言之,我有一个人,这个人有两个列表。我添加了与此类似的内容: person.friendEmailsList=从朋友处下载的邮件; person.businessEmailsList=下载的业务电子邮件

因此,稍后,我访问person.friendEmailsList(当然,使用正确的核心数据调用),并获得所有信息,而不仅仅是朋友。。。朋友,生意,一切


任何建议都将不胜感激

有两种可能的解决方案

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

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

List.friendPerson ---> Person
List.businessPerson ---> Person
更灵活的方法是让列表有一个额外的属性
type
(可以是某种类型的
枚举的数字)

您可以将其放入
List.h
文件中。现在,要仅访问好友列表,您可以执行以下操作:

NSSet *friendList = [person.lists filteredSetUsingPredicate:
       [NSPredicate predicateWithFormat:@"type = %@", @(Friend)]];
这可能有点太难输入了,所以您可以通过在Person.m(在.h中声明)中放入一个访问器方法来简化它:


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

啊,所以分开倒是正确的方法。不知怎么的,它篡改了结构,但那可能是因为我的粗心。我还考虑了枚举属性,下面是SQL样式的键。如果我无法管理数据库,我将使用该方法。我一回来就接受你的答案,一点也测试不了。非常感谢,这似乎是我的行为中的用户错误。当使用唯一反转的方法时,它创建子类,而不仅仅是创建唯一的实体。看起来我可能不得不使用fetched属性方法。我的同事建议使用5个单独的类,每个类都没有唯一的类型,只是为了分割核心数据。但这不起作用的事实让我感到困扰,SQL可以将其分离,但不管怎样,核心数据都会将其推到一个表中。我不认为苹果会制造这么大的缺陷,一直认为我做错了。我们最终使用了4x原始类型,使用了单独的反转,因为这有缺陷,这就是为什么我指出,从概念上来说,这不是最好的方法。问题不在于苹果,而在于老式的关系数据库思维,而不是拥抱对象图。啊,好吧。我支持使用对象图,但这需要创建单独的类型吗?还是枚举法?我意识到这可能是某本书/指南中的一个基本内容,我完全愿意被指到某个地方,解释如何以核心数据的方式实现这一点。我在《核心数据指南》中看到的唯一一件事是定义反向。请使用我建议的附加属性。它极大地简化了事情,代表了一个更接近“现实”的模型,也就是说,相同类型的事情只定义了一次。不要设置“父级”
NSSet *friendList = [person.lists filteredSetUsingPredicate:
       [NSPredicate predicateWithFormat:@"type = %@", @(Friend)]];
-(NSSet*)friendsLists {
    return [person.lists filteredSetUsingPredicate:
       [NSPredicate predicateWithFormat:@"type = %@", @(Friend)]];
}