我的核心数据模型中有两个实体。作者和书。作者可以有很多书。 这是我解决的部分。一切正常。
现在我想按字母顺序取我的作者:
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
时,所有书籍都按(例如)发布日期排序?
答案 0 :(得分:1)
你做不到。多对多关系books
由NSSet
表示,即{。}}
无序集合。你可以
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]]];
}