cocoa - Cocoa 中的共享对象

标签 cocoa arrays core-data instance

我正在 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/

相关文章:

objective-c - 在 Objective-c 中设置打印纸张尺寸

swift - 如何禁用 NSTextView 的用户交互?

IOS 幻灯片菜单,如 facebook 和与 Storyboard一起使用的路径 2.0

java - 搜索前 3 个数字的最快和最有效的方法?

ios - 获取时 Coredata 崩溃

objective-c - IKImageBrowserView 移动项目没有动画

c - 如何用 C 将字符串分成单独的项目(用空格分隔)

c++ - 在 C++ 中修改单个字符串元素

ios - 使用 iCloud 启用 Core Data NSArray-take 方法

ios - 使用 NSPersistentCloudKitContainer 处理重复项