核心数据中的相关实体排序

时间:2013-10-22 06:34:47

标签: ios objective-c xcode sorting core-data

我的核心数据模型中有两个实体。作者和书。作者可以有很多书。 这是我解决的部分。一切正常。

现在我想按字母顺序取我的作者:

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Author" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
NSArray *sortDescriptors = @[sortDescriptor];
[fetchRequest setSortDescriptors:sortDescriptors];

到目前为止没有问题。但现在我想获取所有作者的书籍,按发布日期排序。 当我使用以下代码行获取作者的书籍时......

self.selectedAuthor.books.allObjects

...书籍的顺序似乎是完全随机的。

我的问题:

如何从核心数据中获取对象的相关实体,以便每次使用self.selectedAuthor.books.allObjects时,所有书籍都按(例如)发布日期排序?

2 个答案:

答案 0 :(得分:1)

你做不到。多对多关系booksNSSet表示,即{。}} 无序集合。你可以

  • 像你一样获取所有图书self.selectedAuthor.books.allObjects的数组, 然后在内存中对此数组进行排序,

  • 使用谓词

    Book实体执行获取请求
    [NSPredicate predicateWithFormat:@"author = %@", self.selectedAuthor]
    

    只获取该作者的书籍,并为获取请求添加排序描述符 按发布日期排序。

答案 1 :(得分:1)

您可以在Author类接口和实现写代码中添加方法- (NSArray *)booksSortedByDate;,如下所示:

- (NSArray *)booksSortedByDate {
    return [self.books.allObjects sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"releaseDate" ascending:YES]]];
}