NSFetchedResultsController / NSFetchRequest与NSManagedObject的to-many关系

时间:2011-08-30 16:30:26

标签: objective-c cocoa-touch core-data nsfetchedresultscontroller nsfetchrequest

我在iOS上使用不同的视图控制器呈现NSManagedObject层次结构(基本上是三个层次)。我不完全理解的问题是,如果每个视图控制器都需要NSFetchedResultsController。对于根视图控制器,它看起来很方便,但是后面的视图基于上一个视图中的选择。与直接关系相比,NSFetchRequest怎么样?显示的数据是静态的,并且不会永远改变,因此无需准备更新。它将从核心数据sqlite文件加载。

这是我所拥有的简单图形:

A (1) <---> (*) B (1) <---> (*) C

因此,A - BB - C关系都是一对多的,在根视图中,我显示的是{{1 }}秒。选择一个A将在下一个视图控制器中显示A,等等。

我是使用B(或B)获取NSFetchRequest的实例还是仅使用NSFetchedResultsController中的多对多关系,是否有任何区别?内存占用或内存不足的情况有什么不同吗?我知道我总是可以在A时将fetch控制器放在一边,但是对于托管对象我认为并不那么简单。是这样吗?我喜欢使用直接关系。

提前致谢。

1 个答案:

答案 0 :(得分:0)

除非你为每个A拥有数千个B和C,否则你应该担心的不一样。

如果你使用这种关系,那么你会得到一个NSSet - 这将不会使用NSFetchedResultsController。但是,你得到的对象实际上并没有任何数据,它们都会以故障开始,因此内存占用非常小。他们只在您要求时检索他们的数据:)

如果您收到内存不足警告,可以通过从上下文重新加载来强制托管对象再次成为错误(请参阅the docs here)。