2

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

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

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];

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

self.selectedAuthor.books.allObjects

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

我的问题:

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

4

2 回答 2

1

您可以- (NSArray *)booksSortedByDate;向 Author 类接口添加一个方法,并在实现中编写如下代码:

- (NSArray *)booksSortedByDate {
    return [self.books.allObjects sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"releaseDate" ascending:YES]]];
}
于 2013-10-22T06:58:16.727 回答
1

你不能。多对多关系books由一个 表示NSSet,它是一个 无序集合。你可以

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

或者

  • Book使用谓词对实体执行获取请求

    [NSPredicate predicateWithFormat:@"author = %@", self.selectedAuthor]
    

    仅获取该作者的书籍,并在获取请求中添加排序描述符以获取按发行日期排序的书籍。

于 2013-10-22T06:45:12.600 回答