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



我的核心数据模型中有两个实体。作者和书籍。一个作者可以有很多书。这是我整理好的部分。一切都在起作用。

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

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 时,所有书籍都按(例如)发布日期排序?

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

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

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

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

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

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

    仅获取该作者的图书,并向抓取请求添加排序描述符以按发布日期对书籍进行排序。

最新更新