Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 核心数据:实例化一个";“根对象”;在基于文档的应用程序中_Cocoa_Core Data_Nsobjectcontroller - Fatal编程技术网

Cocoa 核心数据:实例化一个";“根对象”;在基于文档的应用程序中

Cocoa 核心数据:实例化一个";“根对象”;在基于文档的应用程序中,cocoa,core-data,nsobjectcontroller,Cocoa,Core Data,Nsobjectcontroller,我正在使用核心数据创建一个基于文档的项目,并遇到了对我来说可能只是一个概念性问题的问题,因为虽然我对Cocoa并不陌生,但这是我第一次尝试利用核心数据。我试图完成的应该相对简单:随着每个新文档的启动,我希望创建一个作为“根”对象的模型对象的新实例 我所做的是将NSObjectController添加到我的xib中,将其模式设置为实体名称(提供正确的实体名称),勾选“准备内容”,并将其托管对象上下文绑定到文件所有者,并将managedObjectContext作为模型键路径。为了测试这一点,我将主

我正在使用核心数据创建一个基于文档的项目,并遇到了对我来说可能只是一个概念性问题的问题,因为虽然我对Cocoa并不陌生,但这是我第一次尝试利用核心数据。我试图完成的应该相对简单:随着每个新文档的启动,我希望创建一个作为“根”对象的模型对象的新实例

我所做的是将NSObjectController添加到我的xib中,将其模式设置为实体名称(提供正确的实体名称),勾选“准备内容”,并将其托管对象上下文绑定到文件所有者,并将managedObjectContext作为模型键路径。为了测试这一点,我将主窗口的标题绑定到对象控制器,控制器键作为选择,模型键路径作为实体中的键之一

我知道我可以通过编程方式创建我的根对象,但我正试图采用苹果推荐的中介模式。我已经在部门员工教程的“采用调解人模式”部分看到了说明,详细的步骤正是我相信我所做的

有什么想法吗

编辑: 也许我没有正确地说明这个问题。模型是在核心数据中创建的,关系是按照我的需要设置的(使用“根”、子对象和叶对象,使用对单亲关系、对多个子对象关系和isLeaf布尔属性)。我的问题是确保每次启动新文档时都将此根对象实例化为单例。根对象和当前文档之间应该有一个1:1的关系,根对象必须始终存在并且在没有任何用户交互的情况下可用,并且创建并附加到根的子节点是应用程序使用和操作的数据对象

我已经通过编程实现了上述功能,但为了符合核心数据原则,我希望完全采用中介模式,而不是在我的应用程序逻辑中管理任何数据对象的创建。

如果您想要一个“根”管理对象,就像您在链表或树中找到的一样,然后您必须在数据模型本身中设置它

默认情况下,核心数据模型在对象之间没有特定的层次结构。对象可能是相关的,但没有对象在逻辑上“高于”或“低于”另一个对象。通过从任何其他对象开始,并将关系移回所需对象,可以到达任何关系中的对象

托管对象的层次结构需要类似树的结构,如下所示:

Tree{
    nodeName:string
    parent<-->>Tree.children
    children<<-->Tree.parent
}
树{
nodeName:string
parent>Tree.children

实际上,树层次结构确实反映了适用于此特定项目的真实世界模型。如果它适合,它适合,我只是想提醒您不要使用树结构,因为它显示在示例中,或者可能在其他API中使用。