0

自從我已經處理CoreData和macOS,到xib和nibs的日子已經有一段時間了。使用xib,可以使用「文件所有者」來訪問文檔和managedObjectContext。簡單。NSPersistentDocument,Swift,macOS和storyboards - 如何獲取managedObjectContext?

隨着NSPersistentDocument和我的故事板,我有點雞和雞蛋的問題。在我的文檔類,從NSPersistentDocument子類,我有以下幾點:

override func makeWindowControllers() { 
    // Returns the Storyboard that contains your Document window. 
    let storyboard = NSStoryboard(name: "Main", bundle: nil) 
    let windowController = storyboard.instantiateControllerWithIdentifier("Document Window Controller") as! NSWindowController // <- when I need the moc 
    self.addWindowController(windowController) 
    windowController.contentViewController!.representedObject = self // <- when I set the representedObject 
} 

這似乎正是許多人,包括蘋果,所提出的建議。

我的問題是這樣的:在MainViewController中,我想擁有一個對象控制器,它需要綁定到managedObjectContext,但是當它需要擁有managedObjectContext時,我還沒有將representObject設置爲self。所以拋出一個異常。在makeWindowControllers方法的末尾設置representationObject爲時已晚,但我還是沒有看到它在早期得到它。

回答

0

好的。所以。我不知道昨晚發生了什麼事,但是我無法得到這個工作。

今天早上,我重新閱讀representedObject文檔:

的representedObject屬性是鍵 - 值編碼和鍵 - 值觀察兼容。當您使用表示的對象作爲文件的nib文件的所有者時,可以使用以字符串representObject開頭的鍵路徑將控件綁定到文件的所有者。

該文檔清楚地告訴我,magic代表objects。所以我確信我的makeWindowControllers方法與上面一樣,並且確保我的故事板中的對象控制器與文檔所說的一樣。

Don’t mind the (!)

我並不感到驚訝,該路徑有一個小(!),因爲representedObject只是一個AnyObject。

然後我忠實地啓動了應用程序,完全期待它不工作。

但它工作。不知道爲什麼昨天它沒有,但沒有多少我可以做的已經失去的時間。

跟進:作爲一個實驗,我嘗試了一個來自昨天的曲折。 (!)爲了​​擺脫的,並有方便的MOC參考,我添加了這個方法的MainViewController:

var moc:NSManagedObjectContext? { 
    if let doc = self.representedObject as? Document { 
     return doc.managedObjectContext 
    } 
    return nil 
} 

然後我用「self.moc」作爲我的對象將Model Key Path控制器。這不起作用,並引發了熟悉的例外。將模型關鍵路徑恢復爲「self.representedObject.managedObjectContext」,所有工作都很好。 ...就像魔術一樣。

相關問題