核心数据:NSFetchedResultsController可以获取两个不同的实体吗?

fut*_*ked 24 cocoa entities controller core-data

我正在开发一个iPhone应用程序,在一个特定的视图中,我需要加载两个不同的实体:一个将填充一个UITableView,另一个将填充一个UITextView.

是否可以使用单个属性获取这两个属性NSFetchedResultsController

或者我需要使用两种不同的NSFetchedResultsControllers?

关于如何最好地解决这个问题的任何想法?

Tec*_*Zen 15

每个获取请求只有一个实体,每个获取结果控制器只有一个获取.因此,每个实体都需要单独的控制器.

如果你考虑一下,你如何创建一个谓词来获取两个逻辑上独立的实体?

你可能根本不需要两次取出.在大多数情况下,您可以获取填充表的实体,然后使用所选行的实体的关系来填充类似文本视图的内容.

  • 你确实需要倾听变化是没有问题的.您只需对每个委托方法进行比较.if(controller == self.entity1FetchedResultsController){...} else {...} (3认同)
  • 谢谢.我添加了第二个fetch控制器,确保它没有委托,并且它完全按预期工作.由于第二次获取控制器返回结果后我不需要采取任何操作,因此我不需要监听更改. (2认同)

Mar*_*rra 8

正如TechZen所说,答案是否定的.

但是,您可以监视NSManagedObjectContext自己的保存并对这些保存做出反应.如果你确实需要看一个以上的实体(东西是远在iPad比iPhone更常见),然后添加一个NSNotification观察者NSManagedObjectContextDidSaveNotification和看-userInfoNSNotification那回来.然后,您可以根据结果运行谓词,以确定是否需要更新显示.这就是在NSFetchedResultsController幕后做的事情.


Fer*_*vus 5

最好的解决方案是重构模型,看看两个实体是否有共同点。您可以为相交的东西创建一个抽象实体,然后从中继承两个实体。对抽象实体执行获取,获取结果控制器应返回混合结果。