繁体   English   中英

iOS /核心数据:如何通过关系从其他实体获取属性

[英]IOS/Core Data: How to fetch attribute from other entity through relationship

我有一个具有核心数据的主详细信息控制器,该数据从一个实体(即Authors)中获取对象,然后让您详细查看其中一个对象(即一位作者)。

作者对象与第二个实体“书籍”具有一对多关系。 对于每个作者,我想显示他们的书的可点击列表。

我的第一个问题是在显示作者页面之后,我将如何获取书籍列表。

最终,我想使用NSAttributed Text在标签或按钮中将列表显示为可单击的文本,但是现在很高兴只检索书籍列表。

作者与书名为book的关系是一对多的,书与作者书名为author的关系是一对一的。

我将books.h(数据文件)导入authorsVC.h和authorsDetail.h控制器中。

authors.h文件具有如下属性:

@property (nonatomic, strong) Books *authorBook;

以下代码不会引发异常,但会注销null。

 NSLog(@"books %@", _authorBook.bookname); //logs as null even when there are books for the author.

此代码引发显示的异常:

NSLog(@"books %@", _author.book.bookname);

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[_NSFaultingMutableSet bookname]: unrecognized selector sent to instance

核心数据中的多对多关系被实现为NSSet实例。 自从你的情况Author - > Book是一个一对多的关系, _author.bookNSSetBook instances--这是藏书。 Book可能有一个名为bookName的属性,但NSSet没有。

如果您只想要书名,则可以使用

_author.book.valueForKey[@"bookName"]

这将要求集合中的每Book为其bookName并返回仅包含书名的新集合。

以下代码可以解决问题。 与Tom的评级类似,我的评级不允许我投票,但由于不接受点符号,因此进行了一些调整。 valueForKey用于数组。

NSSet *books = _book.author;
   NSArray *booksarr = [[files valueForKey:@"author"] allObjects];
   NSString *bookstr = [booksarr componentsJoinedByString:@","];

放入字符串后,您可以根据需要显示它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM