[英]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.book
是NSSet
的Book
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.