核心数据,托管对象上下文,NSArrayController ..让我理顺了一点

时间:2010-06-16 14:23:10

标签: cocoa core-data

所以我有一个.xcdatamodel,其中有十几个实体已经定义并且彼此相关,具有属性等等。到目前为止,我一直在尝试使用NSTableViews显示/输入数据的GUI,以及我为每个实体实例化的NSArrayControllers。这一切都很有效。它们都与App Delegate的托管对象上下文(MOC)相关联

但是现在我正在尝试以编程方式访问这些数组中的数据,而我发现这样做很迟钝。经过大量阅读后,看起来我应该做的就是去MOC获取给定实体的数据。我还没有完成这项工作,但还可以。

我不明白的是,当我没有通过NSTableView等进入时,如何使用Core Data,而不使用NSArrayControllers。就像我想完全处理项目模型包中的一些.xcdatamodel实体(不接触GUI)。我是否还需要实例化NSArrayController以便我可以“准备实体内容”并对其进行管理和初始化以及所有这些?或者是否有另一种方法可以直接与MOC联系并添加/删除/获取给定实体的数据?

我所说的是我真的不清楚如何处理事情,除非我做的是简单的案例View< - > NSArrayController然后模型< - > MOC

2 个答案:

答案 0 :(得分:2)

您应该查看NSFetchRequest上的executeFetchRequest:error:NSManagedObjectContext方法。

通过阵列控制器访问数据可能很棘手。我发现数组控制器通常设计用于UI元素。阵列控制器将使用一些技巧来保持UI的快节奏。例如,它将在后台线程上获取项目。其中大部分都可以进行配置,但您最好不要自己获取信息。

答案 1 :(得分:2)

NSArrayController和相关类旨在用作现成的MVC设计控制器。因此,他们唯一真正的功能是将UI链接到数据模型。如果您需要以其他方式处理模型,通常以编程方式执行此操作。

要以编程方式访问模型,通常首先使用获取请求(NSFetchRequest)来查找某些实体的相应实例。然后,您将遍历实体关系以查找与获取的实体相关的实体的所有其他实例。

例如:假设您有一个计划类型应用程序。你的实体是日子和事件。每天都有几个活动,但每个活动只有一天。

如果要检查一周的事件,可以获取日期属性在7天范围内感觉的日期对象。然后你会依次询问每一天对象的相关事件。

iOS尚不支持绑定,因此请查看使用Core Data的资源,了解如何手动管理所有这些内容。