Core data 需要使用Swift中使用Cocoa绑定和核心数据的第二个窗口

Core data 需要使用Swift中使用Cocoa绑定和核心数据的第二个窗口,core-data,swift,cocoa-bindings,Core Data,Swift,Cocoa Bindings,随着Swift的引入,我最近开始尝试使用Xcode。我在Objective C方面没有任何背景,但我正在取得进展,特别是在Cocoa绑定和核心数据方面。我正在玩一个OSX应用程序,它有一个xib和一个窗口,并且绑定到一个核心数据模型。到目前为止,一切正常,我可以填充一个没有问题的表视图 我的下一步是包含第二个窗口,其中另一个表视图绑定到我的核心数据模型。我发现这是不可能实现的,因为当我试图将第二个表视图绑定到核心数据模型时,无法访问AppDelegate 所以我尝试在主菜单xib中创建第二个窗口

随着Swift的引入,我最近开始尝试使用Xcode。我在Objective C方面没有任何背景,但我正在取得进展,特别是在Cocoa绑定和核心数据方面。我正在玩一个OSX应用程序,它有一个xib和一个窗口,并且绑定到一个核心数据模型。到目前为止,一切正常,我可以填充一个没有问题的表视图

我的下一步是包含第二个窗口,其中另一个表视图绑定到我的核心数据模型。我发现这是不可能实现的,因为当我试图将第二个表视图绑定到核心数据模型时,无法访问AppDelegate

所以我尝试在主菜单xib中创建第二个窗口;现在装订是可能的,但它似乎非常笨拙。当然,第二个窗口需要它自己的xib,如果需要,我究竟如何绑定到AppDelegate

我的目标是尽可能使用cooca绑定来消除“粘合代码”,但我所有的研究都只揭示了Objective C示例,其中一些非常古老,涉及大量程序代码,与Xcode v6.1完全无关


我是Xcode的新手,但到目前为止我很喜欢它,并希望得到任何建议或帮助。

单协调器应用程序模板将“App Delegate”对象添加到main menu.Xib中,并且它有点神奇地连接到NSApplication对象的委托,在这种情况下,应用程序委托对象由Nib加载过程创建,并附加到NSApplication实例。在另一个笔尖上复制那个物体是相当不可能的

在任何其他Nib中执行您想要的操作的最简单方法是使用以“delegate”开头的键路径绑定到应用程序

其他人会坚持委托对象不应该拥有核心数据堆栈,您应该将所有样板代码移到其他地方。或者,每个视图控制器都应该作为属性传递MOC指针(请参见下面的注释)。。。但这与这个问题无关


YMMV,这个答案来自Objective-C宇宙,但语言不重要。

谢谢@stevesliva。您的解决方案完美无瑕。然而,在发布我的问题后,我做了更多的研究,发现插入
let managedObjectContext=(NSApplication.sharedApplication().delegate作为AppDelegate)第二个窗口控制器中的.managedObjectContext
允许我将辅助阵列控制器绑定到文件的所有者,并保留
self.managedObjectContext
键路径。但哪一个是更好的解决方案;使用你的方法,还是其他方法?你的评论被认为是更好的方法。(在控制器之间传递moc指针)另一个好处是,您可以在第二个窗口中使用一次性子上下文,从而轻松取消/保存。因此self.moc将是代理moc的子级,只有当用户希望保留其所有gui更改时,您才会保存到父级。我的回答是这样的,因为通过应用程序进行绑定实际上并没有作为解决此问题的解决方案被提及,但它是最简单的。