我正在 Cocoa 中使用 CoreData(不是基于文档的)。 我的问题是,我想从不同的 NIB 访问相同的 NSArrayController。 但每个 NIB 都有一个自己的 NSArrayController 实例。
我现在的问题是如何生成共享对象(如 NSUserDefaultsController)。 这对我有很大帮助。感谢您的回答。 =)
最佳答案
您通常不想在 Nib 之间共享 NSArrayController。最好拥有多个 NSArrayController(每个 NIB 一个),它们都绑定(bind)到相同的底层模型。如果您希望此模型(例如 NSArray)是应用程序全局的,您可以通过 NSApplication 的委托(delegate)公开它(例如,在 MainMenu.nib 中实例化您的自定义 MyAppDelegate 类,并将 NSApplication 的 delegate
导出连接到该实例您的 MyAppDelegate 类)。在其他 NIB 中,您可以将 NSArrayController 的 contentArray
绑定(bind)绑定(bind)到 Shared Application.delegate.myArray
(假设 MyAppDelegate 通过 KVC 兼容方法公开一个名为 的 NSArray 绑定(bind)>myArray
)。您实质上是使用 IB 和 MainMenu.nib 来创建 MyAppDelegate 的单例实例。
请记住,这种方法会使应用程序的单元测试变得困难,因为对象图中现在存在单例,您无法在测试期间模拟或 stub 。最好为每个辅助(非 MainMenu.nib)NIB 创建一个 NSWindowController 或 NSViewController 并将这些 nib 中的 NSArrayController 绑定(bind)到 File Owner.myArray
。然后,您可以实例化 NSWindowController 或 NSViewController,在加载辅助 NIB 之前向其传递一个数组(或数组 KVC 兼容对象)。通过这种方式,您可以单独测试 Nib 的功能(使用数组的模拟或 stub )。
关于cocoa - Cocoa 中的共享对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/485245/