0

实体 B(书籍)与实体 D(描述)具有一对多的关系。这个想法是一本书对不同的语言有不同的描述。

我想根据给定语言 (D.languageID) 的书名 (D.title) 对书籍进行排序

如果 B 与 D 具有一对一的关系,我会执行以下操作:

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"d.title" ascending:YES];

当然,你可能会说,模型并没有阻止一本书有许多具有相同语言 ID 的描述。但在这种情况下,任何(例如第一个)描述对我来说都可以。或者我之前可以获取所需的描述对象,但是如何在排序中使用它?

我的模型错了吗?在这种情况下,最好的解决方案是什么?

4

1 回答 1

0

正如您已经意识到的那样,您无法通过一对多进行排序。执行此操作的“最干净”的方法是实现您自己的排序,您可以在获取图书实体后在内存中执行该排序。一旦它在内存中,您就可以通过一种方便的方法进行排序,而不仅仅是数据。

例如,您可以在 Book 子类上调用一个方法,该方法-localTitle从正确的描述中返回适当的标题。从那里你可以排序localTitle

基本上:

  1. 您将创建一个NSFetchedResultsController来跟踪更改。
  2. 当检测到更改时,您重新创建一个按localTitle
  3. 你告诉你的表视图重新加载
  4. 您的表格视图以数组而不是NSFetchedResultsController.

你可以取消它,NSFetchedResultsController但这会变得更复杂一些。

于 2011-11-18T01:22:19.527 回答