CoreData Entity bearbeiten von verschiedenen ViewControllern aus

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • CoreData Entity bearbeiten von verschiedenen ViewControllern aus

    Hallo,

    ich habe mir eine kleine App gebaut um CoreData zu lernen. Dazu habe ich ein Entity Student angelegt mit ein paar Properties. Bevor ich zu meinem Problem komme erkläre ich kurz wie meine App aufgebaut ist.

    Letztlich möchte ich einen SplitView haben, in dem links in einer TableView alle Studenten angezeigt werden (und hinzugefügt/gelöscht werden können) und rechts alle weiteren Properties angezeigt und bearbeitet werden können. Zusätzlich soll rechts ein Platzhalter View angezeigt werden sollte nichts in der Tabelle angewählt sein. Derzeit sieht es folgendermaßen aus:

    App.png
    Das dazugehörige Storyboard:
    Xcode.png

    Eigentlich klappt das ganze auch schon ganz gut. In meinem ListViewController (enthält den ArrayController [studentArrayController Outlet] für die CoreData Entities) übergebe ich den aktuell ausgewählten Studenten via

    Quellcode

    1. func tableViewSelectionDidChange(_ notification: Notification) {
    2. let tableView = notification.object! as! NSTableView
    3. let selectedRow = tableView.selectedRow
    4. let tabViewController = parent?.childViewControllers[1] as! NSTabViewController
    5. if selectedRow != -1 { // A row is indeed selected
    6. tabViewController.selectedTabViewItemIndex = 0
    7. let studentTabView = tabViewController.tabViewItems[0].viewController as! StudentViewController
    8. let selectedStudent = self.studentArrayController.selectedObjects[0]
    9. studentTabView.student = selectedStudent as! Student // Hier setze ich die var student des StudentViewControllers
    10. } else {
    11. tabViewController.selectedTabViewItemIndex = 1
    12. }
    13. }
    Alles anzeigen
    Der StudentViewController hat bisher nur eine var student = Student() die ich im obigen Code setze. Ich habe auch mit einer IBAction überprüft ob die properties des gerade ausgewählten Studenten auch korrekt ankommen, was sie tun. Nun habe ich gehofft ich könnte einfach die Textfelder im StudentViewController im Storyboard via bindings an self.student.propertyname binden. Lege ich ein solches binding an stürzt die App aber direkt ab.

    2017-01-26 16:49:54.390907 CoreDataArrayController[11444:426772] [error] error: CoreData: error: Failed to call designated initializer on NSManagedObject class 'CoreDataArrayController.Student'
    CoreData: error: CoreData: error: Failed to call designated initializer on NSManagedObject class 'CoreDataArrayController.Student'

    2017-01-26 16:49:54.447499 CoreDataArrayController[11444:426772] Failed to set (contentViewController) user defined inspected property on (NSWindow): [<CoreDataArrayController.Student 0x6080000665c0> valueForUndefinedKey:]: the entity (null) is not key value coding-compliant for the key "familyName".
    2017-01-26 16:49:54.581086 CoreDataArrayController[11444:426772] [General] An instance 0x6080000665c0 of class CoreDataArrayController.Student was deallocated while key value observers were still registered with it. Current observation info: <NSKeyValueObservationInfo 0x600000024ac0> (
    <NSKeyValueObservance 0x60000004f6c0: Observer: 0x60000004f5a0, Key path: familyName, Options: <New: NO, Old: NO, Prior: NO> Context: 0x0, Property: 0x60000004f6f0>
    )

    Lange Rede kurzer Sinn: Ich habe das Projekt mal angehängt falls nicht klar geworden ist was mein Problem ist.
    Dateien