使用Interface Builder绑定控制器的managedObjectContext插座?

时间:2012-08-14 02:01:49

标签: objective-c interface-builder

我正在尝试设置一个相当简单的视图,向用户显示一个表。此表连接到阵列控制器,我想用它来从核心数据中检索记录。出于某种原因,我似乎无法将'managedObjectContext'插座连接到我的应用程序中的任何其他内容。当我创建我的项目时,在我的app委托中生成了一个属性,它返回了我需要的MOC,但是我无法在Interface Builder中将它连接起来,即使在将“IBOutlet”添加到声明之后也是如此。下图显示了两端的可用连接:

http://yada.im/uploads/image/screenshot/1108/7efebc90ca7187a537da9ae003dd5f3e.png

我确信我在这里错过了一些简单的步骤,但是我不知道我应该编写什么样的胶水代码,这样我才能更轻松地解决这个问题。作为参考,我尝试将控制器的moc插座中的一条线拖到我能想到的每一个源上,并将“File's Owner”类更改为我的应用程序类。难倒在这里!

2 个答案:

答案 0 :(得分:2)

通常在XCode提供的模板中,managedObjectContextAppDelegate一起出现。 您必须将数组控制器的managedObjectContext引用绑定到managedObjectContext中的AppDelegate

为此,你必须在xib中创建一个AppDelegate的对象,即,如果它尚未存在。(从对象库拖动一个对象占位符并使其类为AppDelegate

这使AppDelegate在xib中的绑定可见。

下一步实际上是绑定了managedObjectContext。选择阵列控制器并转到绑定检查器。在参数部分,从下拉列表中选择App Delegate,然后选中“Bind to”。 使用self.managedObjectContext填写“模型密钥路径”字段。现在,您还可以在连接检查器中找到连接。

<强>更新 创建新AppDelegate对象的过程只有在主nib文件中不存在时才会完成(但生成的存根在主nib文件中始终具有AppDelegate对象。)< / p>

对于非主nib文件,如果我们按照上述方法,将创建一个不会是AppDelegate委托的新NSApplication's对象。即使这可以通过连接每个笔尖中提供的应用程序对象代理的委托出口来解决,AppDelegate对象仍然不会相同。

结果是两个不同的managedObjectContext与同一个商店进行通信。虽然在每一步保存更改时这似乎可以正常工作,但这不是我们想要的。

获取正确的AppDelegate对象,即主nib文件中使用的对象: - 而不是创建新的AppDelegate对象,将数组控制器的managedObjectContext直接通过应用程序绑定到其委托。换句话说,要绑定的对象将是应用程序对象,使用的密钥路径将是self.delegate.managedObjectContext

答案 1 :(得分:0)

添加实体对象的方式取决于您要实现的特定逻辑。 通用且简单的解决方案是,将输入字段绑定到数组控制器,就像您可能为表执行的操作一样,然后将数组控制器方法连接到工作表内的按钮。
  
另一种选择是在调用超类方法add:之前对NSArrayController进行子类化并覆盖诸如[super add:sender]之类的超类方法来编写代码(可能用于打开幻灯片)。不要忘记将NSArrayController的这个子类指定为xib中数组控制器的类。