【问题标题】:Sort related entities in core data对核心数据中的相关实体进行排序
【发布时间】:2013-10-22 06:34:46
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • Martin R 给出的另一个答案似乎是处理此问题的正确方法,但您的答案最适合我的情况。所以谢谢你!
    【解决方案2】:

    你不能。一对多关系booksNSSet 表示,这是一个 无序集合。你可以

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

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

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

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

    【讨论】:

    • 如果一本书可以有多个作者,有没有办法做第二种方法?
    猜你喜欢
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    相关资源
    最近更新 更多