如何使用特定的托管对象来构造排序描述符?

时间:2011-11-17 16:03:35

标签: ios core-data nsfetchedresultscontroller nsmanagedobject nssortdescriptor

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

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

如果B与D有一对一的关系,我会做类似的事情:

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

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

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

1 个答案:

答案 0 :(得分:0)

你已经意识到,你不能通过一对多排序。 “最干净”的方法是在获取图书实体后实现您可以在内存中执行 。一旦它在内存中,您可以通过便捷方法而不仅仅是数据进行排序。

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

基本上:

  1. 您可以创建NSFetchedResultsController来跟踪更改。
  2. 检测到更改时,您将重新创建按localTitle
  3. 排序的数组
  4. 您告诉您的表格视图重新加载
  5. 您的表格视图会从数组中提取,而不是NSFetchedResultsController
  6. 你可以取消NSFetchedResultsController,但这会变得更复杂。