Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.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
Iphone 如何从核心数据中的关系相关实体获取属性?_Iphone_Core Data_Entity_Relationship_Nsfetchrequest - Fatal编程技术网

Iphone 如何从核心数据中的关系相关实体获取属性?

Iphone 如何从核心数据中的关系相关实体获取属性?,iphone,core-data,entity,relationship,nsfetchrequest,Iphone,Core Data,Entity,Relationship,Nsfetchrequest,我对ObjC很有经验,但对核心数据比较陌生。到目前为止,这一切都很简单,但我对人际关系有点执着,所以我希望有人能给我指出正确的方向 我有两个实体:一个是人员列表,另一个是事件列表 我在两个实体之间的数据模型中设置了一个反向关系(称为“人”),其中人的一方设置为“多人”。换句话说,我可以有5个人,但有数千个事件;每个事件都与一个人有关,但一个人可以对任意数量的事件负责 我使用[NSEntityDescription insertNewObjectForEntityForName…]添加事件,然后使

我对ObjC很有经验,但对核心数据比较陌生。到目前为止,这一切都很简单,但我对人际关系有点执着,所以我希望有人能给我指出正确的方向

我有两个实体:一个是人员列表,另一个是事件列表

我在两个实体之间的数据模型中设置了一个反向关系(称为“人”),其中人的一方设置为“多人”。换句话说,我可以有5个人,但有数千个事件;每个事件都与一个人有关,但一个人可以对任意数量的事件负责

我使用[NSEntityDescription insertNewObjectForEntityForName…]添加事件,然后使用NSFetchedResultsController检索它们

问题是,在获取特定事件对象时,我还不能成功地检索到关于某人的数据。例如:

Log *logEntry = [_fetchedResultsController objectAtIndexPath:indexPath];

// this works:

NSLog(@"description: %@", logEntry.description);
NSLog(@"happened %i minutes ago", -[logEntry.date timeIntervalSinceNow] / 60);

// this does not (just spits out NULL):

NSLog(@"person responsible: %@", logEntry.people.name);

我错过了什么?我如何获得关系中人的数据?我有一种感觉,在第一时间添加日志条目时,我遗漏了一个重要的链接,或者在检索日志条目时遗漏了一个必要的谓词。苹果的文档在关系和具体例子方面有点欠缺。在这里,我的头脑可能仍然停留在旧式SQL中,所以我真的需要一些帮助。谢谢

如果people是多人的,那么它将作为一个集合返回-因此logEntry.people返回一个NSSet的people,您必须将其循环以获取people,从而能够询问这些人的姓名


与多个对象的任何关系都将建模为一个集合(当前在iOS中)。

感谢您的回复。如上所述,一项活动应限于一个人。如果只有一条记录,是否将logEntry.people作为NSSet返回?顺便说一句,我已经试过了,但是当我将其转换为NSSet时,该集合是空的。我怀疑可能是缺少谓词,或者可能是我错误地插入了记录。还有什么想法吗?如果你有一种相反的关系,把一件事安排在一个人身上,那么你也应该把别人安排在一件事上。你声称只有一个人是可能的,但如果是这样的话,为什么这个关系被命名为“人”——对我来说,这表明这个关系对很多人来说都是可能的。它被称为“人”,是为了与应用程序的其余部分保持一致,并与我用来识别“人”实体中单个记录的“人”区分开来。由于我获取的数据是空的,我认为要么是获取请求不正确,要么是数据不完整。如果fetch请求没有比我已经包含的内容更多的内容,那么数据一定是坏的。我不明白的是,我应该如何准确地将单个事件与人员实体中的单个人员相关联。另一方面,这个术语非常混乱,以至于我不确定我是否理解了模型。你能分离出模型的那一部分并生成一个屏幕截图吗?对于将单个事件与人联系起来的方式,最简单的答案是说偶数.person=person,从人中提取特定的人(除非人是人,这同样让我感到困惑)。很抱歉,命名法很混乱,我会重新考虑。不管怎样,我已经解决了问题。事实证明,在将新事件添加到db时,我没有为event.person分配有效的对象。这根本不是一个获取问题。对于遵循这一点的人,您只需要从相关实体中检索一个有效的对象,在使用insertNewObjectForEntityForName时将其保留足够长的时间(以数组或其他形式)以引用它。谢谢你的帮助,肯德尔!