0

实体B(书)与实体D(描述)具有一对多的关系。这个想法是,一本书对不同的语言有不同的描述。如何使用特定的托管对象来构造排序描述符?

我希望用他们的标题(D.title)对于给定的语言(D.languageID)图书排序

若B有一个一对一关系d,我会做这样的事情:

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

当然,您可以说,该模型并不妨碍书籍具有多个具有相同语言ID的描述。但在这种情况下,任何(例如第一个)描述对我都可以。或者我可以在之前获取所需的描述对象,但是如何在排序中使用它?

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

回答

0

您不能通过一对多的方式进行排序,因为您已经意识到了这一点。执行此操作的“最简洁”方式是实现自己的排序,在获取图书实体后,您可以在内存中执行。一旦它在内存中,你可以通过一种方便的方法来排序,而不仅仅是数据。

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

基本上是:

  1. 您可以创建一个NSFetchedResultsController跟踪更改。
  2. 当检测到改变你重新创建一个由localTitle
  3. 整理你告诉你的表格视图重载
  4. 你的表视图滋生于阵列,而不是NSFetchedResultsController的数组。

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