【发布时间】:2011-12-03 00:58:27
【问题描述】:
我的应用程序 - 基于文档的 Core Data 应用程序 - 正在进行第二次迭代,现在需要多个窗口来管理多个模型对象。目前它通过一个窗口和一个控制器来管理事件和位置。标准生成的文档类目前充当主窗口的控制器。
我现在想要一个单独的窗口来管理 Locations 模型对象。为每个窗口设置一个单独的控制器 (NSWindowController) 似乎是不错的设计,但后来我意识到这些控制器将无法访问托管对象上下文,而这是访问模型对象所必需的。
这里最好的方法是什么?
编辑:
我按照ughoavgfhw的解决方法如下:
- 为 Locations 创建了一个新的 XIB,并添加了一个 Array Controller 来加载 Location 对象
- 创建了一个自定义控制器
ManageLocationsController作为NSWindowController的子类 - 使自定义控制器成为位置 XIB 中的文件所有者
- 将数组控制器的上下文映射到文件所有者和 keyPath document.managedObjectContext
我打开位置窗口:
ManageLocationsController *aController = [[ManageLocationsController alloc] initWithWindowNibName:@"ManageLocations"];
[aController showWindow: self];
这是从 EventDocument 完成的,它是 XCode 生成的默认类。
映射阵列控制器时,这会在 keyPath 字段中留下一个黑色圆形感叹号,当我打开位置窗口时,它会引发异常,提示“没有托管对象无法执行操作”。显然不好。我错过了什么?
【问题讨论】: