IOS /核心数据:如何通过关系

时间:2016-02-19 20:11:12

标签: ios core-data one-to-many

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

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

我的第一个问题是在显示作者页面之后,我该如何获取图书清单。

最后,我想将标签或按钮中的列表显示为可点击的文本,可能使用NSAttributed Text,但现在很乐意只检索书籍列表。

作者与书籍有关系,名为 book ,这是一对多,书籍与作者的互惠关系,名为作者,即一本一个。

我将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

2 个答案:

答案 0 :(得分:0)

核心数据中的多对多关系实现为NSSet个实例。在您的情况下Author - > Book是一对多关系,_author.bookNSSetBook个实例 - 这是书籍的集合。 Book可能有一个名为bookName的属性,但NSSet没有。

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

_author.book.valueForKey[@"bookName"]

这将询问集合中Book的每个bookName并返回一组新的图书名称。

答案 1 :(得分:0)

以下代码可以解决问题。与汤姆的情况类似,根据我的评级,我不允许提升,但有一些调整,因为它不接受点符号。 valueForKey用于数组。

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

在字符串中,您可以根据需要显示它。