0

Es ist schon eine Weile her, seit ich CoreData und macOS in den Tagen von Xib und Nibs in Angriff genommen habe. Mit einer XIB gibt es den "Eigentümer der Datei", der Ihnen Zugriff auf Ihr Dokument und den managedObjectContext geben kann. Einfach.NSPersistentDocument, Swift, macOS und Storyboards - wie bekomme ich den managedObjectContext?

Mit NSPersistentDocument und meinem Storyboard habe ich ein kleines Problem mit Huhn und Ei. In meiner Dokumentenklasse, subclassed von NSPersistentDocument, habe ich folgende:

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 
} 

Dies scheint zu sein, was viele Leute, darunter Apple, schlagen.

Mein Problem ist das: In der MainViewController möchte ich einen Objekt-Controller haben und es muss an die managedObjectContext gebunden werden, aber wenn es den managedObjectContext haben muss, habe ich das reprodedObject noch nicht auf self gesetzt. Also wird eine Ausnahme ausgelöst. Das repletedObject am Ende der makeWindowControllers-Methode zu setzen, ist zu spät, aber ich sehe es sowieso nicht, um es früher einzufügen.

Antwort

0

Okay. Damit. Ich weiß nicht, was letzte Nacht passiert ist, aber ich konnte das nicht funktionieren lassen.

An diesem Morgen, ich die Dokumentation auf representedObject erneut zu lesen:

Die representedObject Eigenschaft ist der Schlüssel-Wert-Codierung und Schlüssel-Wert-Beobachtung konform. Wenn Sie das dargestellte Objekt als Besitzer einer NIB-Datei verwenden, können Sie Steuerelemente mit Schlüsselpfaden, die mit der Zeichenfolge "representObject" beginnen, an den Besitzer der Datei binden.

Die Dokumente sagen mir klar, dass die Magie in representObject ist. Also stellte ich sicher, dass meine makeWindowControllers-Methode wie oben beschrieben war und ich sicherstellte, dass mein Objekt-Controller in meinem Storyboard so war, wie es die Dokumente sagten.

Don’t mind the (!)

war ich nicht überrascht, dass der Weg ein wenig hat (!), Weil representedObject nur ein ANYOBJECT ist.

Ich startete dann pflichtbewusst die App, völlig erwartet, dass es nicht funktioniert.

Aber es hat funktioniert. Keine Ahnung, warum es gestern nicht so war, aber ich kann nicht viel gegen die Stunden unternehmen, die ich schon verloren habe.

Follow-up: Als ein Experiment habe ich einen der Drehungen von gestern versucht. (!) Bekommen von der loszuwerden und einen Verweis praktisch, um die moc zu haben, habe ich diese Methode, um die Mainviewcontroller:

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

Und dann habe ich „self.moc“ als Modell Schlüsselpfad für mein Objekt Regler. Dies hat nicht funktioniert und die bekannte Ausnahme wurde ausgelöst. Stellen Sie den Modellschlüsselpfad zu "self.representedObject.managedObjectContext" wieder her, und alles funktioniert ordnungsgemäß. … wie Magie.

Verwandte Themen