我在Cocoa中使用CoreData(不是基于文档的).我的问题是,我想从不同的NIB访问SAME NSArrayController.但每个NIB都有自己的NSArrayController实例.
我现在的问题是如何生成sharedObjects(如NSUserDefaultsController).这对我很有帮助.谢谢你的回答.=)
您通常不希望在nib之间共享NSArrayController.拥有多个NSArrayController(每个NIB一个)可能更好,它们都绑定到相同的底层模型.如果您希望此模型(例如NSArray)成为应用程序全局,则可以通过NSApplication的委托公开它(例如,在MainMenu.nib中实例化您的自定义MyAppDelegate类,并将NSApplication的delegate
出口连接到MyAppDelegate类的实例).在其他NIB中,您可以绑定NSArrayController的contentArray
绑定Shared Application.delegate.myArray
(假设MyAppDelegate通过符合KVC的方法公开 - 调用NSArray绑定myArray
).您实际上是使用IB和MainMenu.nib来创建MyAppDelegate的单例实例.
请记住,这种方法使得单元测试应用程序变得困难,因为对象图中现在有单例,在测试期间无法模拟或存根.为每个辅助(非MainMenu.nib)NIB创建NSWindowController或NSViewController并将这些nib中的NSArrayControllers绑定到更好File Owner.myArray
.然后,您可以实例化NSWindowController或NSViewController,在加载辅助NIB之前将其传递给一个数组(或符合KVC的数组对象).通过这种方式,您可以单独测试nib的功能(对阵列使用模拟或存根).