创建NSFetchedResultsController管理具有多对多关系的实体

时间:2011-04-14 16:25:32

标签: uitableview core-data nsfetchedresultscontroller

我有一个名为Project的实体和另一个名为Employee的实体。员工从事多个项目。

Project实体有project name

Employee实体有First namelast namedepartmentid number

我希望数据显示在部分标题表中,如此

  

项目1
  DEPT1
  -firstname1,lastname1
  -firstname2,lastname2
  部门2   firstname3,lastname3
  firstname4,lastname4
  项目2
  DEPT1
  -firstname1,lastname1

我该怎么做?我不必显示部门名称,但必须按此方式进行排序。

我正在使用Core Data& UITableView。我需要为此构建NSFetchResultsController

2 个答案:

答案 0 :(得分:0)

我认为你的问题的根源是这样一个事实:当你从关系的 对象访问它时,一个多对多的关系会产生一个NSSet(即:Project-> Employees - 导致NSSet的员工)。 NSSets当然是无序的。

答案是:

您需要手动对员工NSSets进行排序。我建议你将NSSet转换为NSMutableArray,然后使用-sortUsingBlock:或沿着这些行的东西来做。为了避免在每次需要时对其进行重新排序,请将其存储为Project类的成员变量。这样做,懒得创建它应该很容易,并且只在数据集发生变化时重新排序,这对性能会更好。

你可能能够在核心数据中使用子查询做些什么...但我认为你可能会发现它会比你想要的更频繁地击中磁盘。 (只是猜测那里)我上面提到的技术有点不那么神奇,有点蛮力,但它会起作用,你会确切地知道它是如何表现的。

答案 1 :(得分:0)

使用fetchedResultsController获取“项目”实体,您将能够通过它们的关系访问和显示tableview数据源方法中的Employee NSSet。