0

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

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

我确定我在这里遗漏了一些简单的步骤,但我不知道我应该写哪一段胶水代码可以让我更容易地把它连接起来。作为参考,我尝试将一条线从控制器的 moc 插座拖到我能想到的每个来源,并将“文件所有者”类更改为我的应用程序的类。难倒这里!

4

2 回答 2

2

通常在 XCode 提供的模板中managedObjectContext,带有AppDelegate. 您必须将managedObjectContext数组控制器的引用绑定到managedObjectContextin AppDelegate

为此,您必须AppDelegate在 xib 内部创建一个对象,即,如果它不存在。(从您的对象库中拖动一个对象占位符并将其类设为AppDelegate

这使得AppDelegate该 xib 内部的绑定可见。

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

更新: 创建新AppDelegate对象的过程只有在它不存在于主 nib 文件中时才进行(但生成的存根始终AppDelegate在主 nib 文件中具有该对象)。

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

结果是两个不同的 managedObjectContext 与同一个商店交谈。尽管在每一步都保存更改时这似乎可以正常工作,但这不是我们想要的。

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

于 2012-08-14T12:37:45.650 回答
0

The way to add objects of your entity depends on the specific logic you want to implement. The generic and easy solution would be, binding the fields for input to the array controller like you might have done for the table and then hooking up the array controller methods to the buttons inside the sheet.

Another option is sub-classing NSArrayController and over-riding the super class methods like add: to write your code (for opening your slide sheet maybe) before calling the super class method, [super add:sender] . Don't forget to specify this sub-class of NSArrayController as the class of your array controller in the xib.

于 2012-08-15T08:49:36.277 回答