IOS/Core 数据:如何通过关系从其他实体获取属性
IOS/Core Data: How to fetch attribute from other entity through relationship
我有一个包含核心数据的主细节控制器,它从一个实体(即作者)获取对象,然后让您详细查看其中一个对象,即一位作者。
作者对象与第二个实体 Books 具有一对多关系。对于每位作者,我想显示他们的书籍的可点击列表。
我的第一个问题是在显示作者页面后,如何获取图书列表。
最终,我想在标签或按钮中将列表显示为可点击的文本,也许使用 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
Core Data 中的对多关系被实现为 NSSet
个实例。在您的情况下,因为 Author
-> Book
是一对多关系,_author.book
是 Book
个实例的 NSSet
——这是书籍的集合. Book
可能有一个名为 bookName
的属性,但 NSSet
没有。
如果您只想要书名,可以使用
_author.book.valueForKey[@"bookName"]
这将向集合中的每个 Book
询问其 bookName
和 return 一组新的书名。
下面的代码成功了。类似于 Tom's,鉴于我的评级,我不允许投票,但有一些调整,因为它不接受点符号。 valueForKey 用于数组。
NSSet *books = _book.author;
NSArray *booksarr = [[files valueForKey:@"author"] allObjects];
NSString *bookstr = [booksarr componentsJoinedByString:@","];
在一个字符串中,您可以根据需要显示它。
我有一个包含核心数据的主细节控制器,它从一个实体(即作者)获取对象,然后让您详细查看其中一个对象,即一位作者。
作者对象与第二个实体 Books 具有一对多关系。对于每位作者,我想显示他们的书籍的可点击列表。
我的第一个问题是在显示作者页面后,如何获取图书列表。
最终,我想在标签或按钮中将列表显示为可点击的文本,也许使用 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
Core Data 中的对多关系被实现为 NSSet
个实例。在您的情况下,因为 Author
-> Book
是一对多关系,_author.book
是 Book
个实例的 NSSet
——这是书籍的集合. Book
可能有一个名为 bookName
的属性,但 NSSet
没有。
如果您只想要书名,可以使用
_author.book.valueForKey[@"bookName"]
这将向集合中的每个 Book
询问其 bookName
和 return 一组新的书名。
下面的代码成功了。类似于 Tom's,鉴于我的评级,我不允许投票,但有一些调整,因为它不接受点符号。 valueForKey 用于数组。
NSSet *books = _book.author;
NSArray *booksarr = [[files valueForKey:@"author"] allObjects];
NSString *bookstr = [booksarr componentsJoinedByString:@","];
在一个字符串中,您可以根据需要显示它。