0

私はCoreDataとmacOSに取り組んでから、しばらくしてきました.xibとnibの時代に戻ってきました。 xibには、ドキュメントとmanagedObjectContextへのアクセスを提供する「File's Owner」があります。簡単です。NSPersistentDocument、Swift、macOS、storyboards - managedObjectContextの取得方法は?

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 
} 

これは、Appleを含む多くの人々が、示唆されているもののようだ:NSPersistentDocumentからサブクラス私のDocumentクラスでは、私は以下のものを持っています。

MainViewControllerではObjectControllerが必要ですが、managedObjectContextにバインドする必要がありますが、managedObjectContextを設定する必要がある場合は、selfにselfをまだ設定していません。したがって、例外がスローされます。 makeWindowControllersメソッドの最後にrepresentObjectを設定するのは遅すぎますが、それ以前の方法では表示されません。

答えて

0

大丈夫です。そう。私は昨夜何が起こっていたのか分かりませんが、私はこの仕事を得る方法がありませんでした。

今朝、私はrepresentedObject上のドキュメントを再読み込み:

representedObjectプロパティは対応観察キー値コーディングとキー値です。表現されたオブジェクトをファイルのnibファイルの所有者として使用すると、表現された文字列で始まるキーパスを使用して、コントロールをファイルの所有者にバインドできます。

ドキュメントは明らかに、魔法が表現されたオブジェクトであることを私に伝えています。だから、私はmakeWindowControllersメソッドが上記の通りであることを確認し、私のストーリーボードのオブジェクトコントローラは、ドキュメントがそうすべきだと確信させました。

Don’t mind the (!)

私はパスが少しを持っていること(!)representedObjectがちょうどANYOBJECTあるので驚きませんでした。

私は忠実に、完全にそれが動作しないことを期待して、アプリを起動しました。

しかし、それは働いた。なぜ昨日なぜそれをしなかったのか分かりませんが、すでに失われた時間について私ができることはあまりありません。

フォローアップ:実験として、私は昨日の紆余曲折のうちの1つを試しました。 (!)を取り除くためにとMOCに便利なリファレンスを持っている、私はMainViewControllerに、このメソッドを追加しました:

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

そして私は私のオブジェクトのためのモデルキーパスとして「self.moc」を使用コントローラ。これはうまくいかず、おなじみの例外がスローされました。モデルのキーパスを "self.representedObject.managedObjectContext"に戻すと、すべて正常に動作します。 ...魔法のように。

関連する問題