核心数据 - 如何通过连接表获取相关记录

时间:2010-07-30 19:21:51

标签: objective-c core-data

假设您有一个核心数据关系,例如:

Book ---->> Chapter ---->> Page

如果Book对象名为aBookaBook.chapters将返回本书的章节。但是你怎么得到一本书的页面(即book.pages)?您如何通过pageNumber属性对页面进行排序?

谢谢!

2 个答案:

答案 0 :(得分:2)

给定Book个实例,myBook

NSSet* pages = [myBook valueForKeyPath:@"chapters.@unionOfSets.pages"];

将为您提供所有页面的联合。请参阅键值编码编程指南中的“Set and Array Operators”部分。

NSArray *chaperPages = [myBook.chapters valueForKeyPath:@"pages"];

将为您提供一组NSSet个页面,每章一组。

答案 1 :(得分:0)

获取按Page排序的BookmyBook)的所有pageNumber的最快方法是:

NSSet *pageSet = [myBook valueForKey:@"chapters.@unionOfSets.pages"];
NSSortDescriptor *sortDesc = [[NSSortDescriptor alloc] initWithKey@"pageNumber" ascending:YES];
NSArray *pages = [pageSet sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDesc]];
[sortDesc release];

这将生成一个数组,其中包含按pageNumber

排序的所有章节中的所有页面