NSFetchedResultsController / Parent-Child

时间:2011-12-19 21:37:36

标签: iphone core-data nsfetchedresultscontroller nssortdescriptor

我正在开发我的第一个Core Data支持的应用程序,并且无法确定如何正确设置NSFetchedResultsController。我有两个实体:

/-----------\        /-----------\
| List      |        | ListItem  |
| --------- |        | --------- |
| listName  |        | itemName  |
| --------- |        | --------- |
| listItems |<---->> | list      |
\ --------- /        \ --------- /

我有两个视图(每个视图都继承自UITableViewController,每个视图都由NSFetchedResultsController支持)。第一个视图是UITableView,显示所有List项。选择行时,会按下第二个视图。

我在视图控制器中有一个名为@property (strong, nonatomic) List *selectedList的属性,我在推送视图之前使用选定的List进行分配。

我在设置时遇到的问题是让第二个视图仅显示其父级为选定ListItem的{​​{1}}个对象。我知道这属于List中的某个地方,但我不知道在哪里。

这是我的代码:

NSFetchedResultsController

我是否需要添加某种排序描述符,或者答案是否与其他内容有关?谢谢!

1 个答案:

答案 0 :(得分:1)

您需要NSPredicate选择其中ListItemselectedList属性相匹配的list

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"list == %@", self.selectedList];
[fetchRequest setPredicate:predicate];

这里有一点需要注意,那就是谓词会根据selectedList而改变,这意味着获取请求会发生变化。如果您要更改获取请求,Apple会在NSFetchedResultsController Class Reference

中显示此警告
  

您不能简单地更改获取请求以修改结果。如果   要更改获取请求,您必须:

     
      
  1. 如果您使用的是缓存,请将其删除(使用 +deleteCacheWithName: )。

  2.   
  3. 通常,如果要更改提取请求,则不应使用缓存。

  4.   
  5. 更改提取请求。调用 -performFetch:

  6.