【发布时间】:2016-06-13 12:12:45
【问题描述】:
我正在 Xcode 7.3.1 中开发 Mac 应用程序。我正在尝试将模型对象上下文从我的 AppDelegate 传递给 ArrayController。
我有一个名为 DataController 的类,它创建了我的核心数据堆栈。 DataController.managedObjectContext 保存托管对象上下文。
我的 AppDelegate 类如下:
class AppDelegate: NSObject, NSApplicationDelegate {
var dataController: DataController!
func applicationDidFinishLaunching(aNotification: NSNotification) {
// Insert code here to initialize your application
// Create an instance of the DataController class.
dataController = DataController()
// Create a reference to the first ViewController embedded in the WindowController.
guard let splitViewController = NSApplication.sharedApplication().windows[0].contentViewController as? ManagedObjectContextSettable
else { fatalError("Wrong view controller type")}
// Set the managedObjectContext property.
splitViewController.managedObjectContext = dataController.managedObjectContext
}
func applicationWillTerminate(aNotification: NSNotification) {
// Insert code here to tear down your application
}
}
在我的故事板中,我在 WindowController 中嵌入了一个 SplitViewController。 SplitViewController 有自己的自定义视图控制器类,名为 SplitViewController。这是SplitViewController中的代码:
class SplitViewController: NSSplitViewController, ManagedObjectContextSettable {
var managedObjectContext: NSManagedObjectContext!
override func viewDidLoad() {
super.viewDidLoad()
// Do view setup here.
// Create a reference to the first ViewController embedded in the WindowController.
let childControllers = self.childViewControllers
print("childControllers.count = \(childControllers.count)")
for childController in childControllers{
if childController.isKindOfClass(TableViewController){
print("Found TableViewController")
guard let tableViewController = childController as? ManagedObjectContextSettable
else { fatalError("Wrong view controller type")}
tableViewController.managedObjectContext = managedObjectContext
}
}
}
}
其中一个拆分视图项是我的 TableView,它有自己的视图控制器,名为 TableViewController。下面是 TableViewController 的代码:
class TableViewController: NSViewController, ManagedObjectContextSettable, NSTableViewDataSource, NSTableViewDelegate {
@IBOutlet weak var tableView: NSTableView!
var managedObjectContext: NSManagedObjectContext!
override func viewDidLoad() {
super.viewDidLoad()
// Do view setup here.
//print(managedObjectContext.description)
}
}
在情节提要中,我拖动了一个 ArrayController,在 Inspector 的 Bindings 选项卡中,我设置了 Bind To 并选择了 TableViewController 并将 Model Key Path 设置为“self.managedObjectContext”。最终它没有收到托管对象上下文。
我无法确定是否应该为嵌入式 ViewController 重写 prepareForSegue 函数,我阅读的每个示例都是针对 IOS 的。
请问我哪里出错了?
【问题讨论】:
标签: macos core-data cocoa-bindings