核心数据 - 查询多对多关系

时间:2014-01-03 23:01:49

标签: ios iphone objective-c core-data nsfetchedresultscontroller

我有一个核心数据模型,如下所示:

Author
======
- name
- bio

- books (to-many relationship)


Book
====
- title
- release date

- author (to-one relationship)  

我向用户呈现作者的表格视图,每个表格单元格代表作者,并显示他撰写的最新书籍的nametitle

要显示作者列表,我使用NSFetchedResultsController并使用以下NSFetchRequest

NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Author"];
request.predicate = nil;
request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]];
request.fetchBatchSize = 20;  

我的问题是:

我应该如何获得每位作者的最新书名?我可以在原始请求中获取该信息,还是需要做一些其他请求?

2 个答案:

答案 0 :(得分:1)

如果您已经拥有Author托管对象,则无需执行其他获取请求。只需从Author的{​​{1}}属性创建一个排序数组。要实现此目的,您可以使用books的{​​{1}}方法并传入按发布日期排序的描述符。

答案 1 :(得分:0)

要将其作为同一请求的一部分,您可以在存储最新图书的Author对象中包含一个属性

Author
======
- name
- bio
- latestBook

- books (to-many relationship)

然后,只需使用author.latestBook.title

即可获取详细信息

将最新图书添加到latestBook属性时,您还需要设置books属性。

或者,它可能是您根据最新releaseDate从帐套计算的瞬态属性。