Xcode Swift 4 CoreData: Nach erneutem anwenden von "Create NSManagedObject Subclass..." - Erhalte ich nun Fehler beim beenden der App

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

  • Xcode Swift 4 CoreData: Nach erneutem anwenden von "Create NSManagedObject Subclass..." - Erhalte ich nun Fehler beim beenden der App

    Hallo,

    ich bin nun irritiert. Nachdem ich die Classes und Properties für mein CoreData-Model erneut angelegt habe, erhalte ich folgende Fehlermeldung:

    "error: -addPersistentStoreWithType:SQLite configuration:(null) URL:file:///Users/"

    Meine Vermutung war, dass da ein Rechte-Problem vorliegt. Also habe ich in LIBRARY/.../Xcode/DerivedData/ das Projekt gelöscht und nochmals gestartet. Aber die Fehlermeldung bleibt! Es kann doch nicht sein, dass man die Classes und Properties nur einmal erzeugen darf oder?

    Ich habe einige Hinweise im Netz zu diesem Fehler gefunden und ausprobiert, aber nichts hat wirklich funktioniert. ?(

    Wie kann ich diesen Fehler bereinigen?

    Vielen Dank mal vorab.
  • MCDan schrieb:

    Schau mal in die Methode persistentStoreCoordinator im AppDelegate. Dort ist sicherlich die storeURL nicht korrekt.

    Quellcode

    1. lazy var persistentContainer: NSPersistentContainer = {
    2. let container = NSPersistentContainer(name: "xSTCoreData")
    3. container.loadPersistentStores(completionHandler: {
    4. (storeDescription, error) in
    5. if let error = error {
    6. fatalError("Unresolved error \(error)") }
    7. })
    8. return container
    9. }()
    Alles anzeigen
    Der Fehler tritt in Zeile 5 (container.loadPersistentStores.....) auf. Nur verstehe ich es nicht wirklich. Nachdem ich das CoreData-Model in einer neuen App erstellt hatte und wie von Dir vorgeschlagen in dieses Projekt (samt der aus AppDelegate benötigten Methoden) transferiert hatte. Funktionierte es einwandfrei. Nun da ich eine Änderung am Model vorgenommen habe und die Classes und Properties erneut erzeugt habe macht es Ärger. ?(
  • MyMattes schrieb:

    Hast Du vielleicht noch eine alte inkompatible CoreData-Datei an der Store-URL liegen? Auch wenn Du oben ja vom Löschen der DerivedData schriebst...

    Mattes
    Hallo Mattes,

    ich habe die Projektdaten nochmals aus DerivedData gelöscht. Das Projekt umbenannt und die xSTCoreData.xcdatamodeld im Anschluss aus dem Projekt vollständig gelöscht. Daraufhin habe ich diese nochmals hinzugefügt und das Projekt gestartet. Aber es wird mir wieder exakt die gleiche Fehlermeldung angezeigt.

    Gibt es noch ein Verzeichnis das ich prüfen könnte?
  • Hallo zusammen,

    nachdem ich den Fehler in einem neuen Projekt reproduziert konnte, habe ich nun folgende Lösung gefunden:

    Innerhalb des Data Model Inspectors (Entity zuvor auswählen) kann in der Rubrik "Class" bei Module "Current Product Module" eingestellt werden. Nachdem ich dies für alle Entities durchgeführt hatte, läuft das Projekt nun wieder ohne Probleme. :thumbsup: Auch wenn danach die Einstellung zurückgenommen wird.

    Etwas unbefriedigend ist, dass ich nicht genau nachvollziehen kann warum dies der Fall ist. ?(

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von OSXDev ()

  • DerivedData ist ja nur ein Verzeichnis von Xcode, welches beim Build der App verwendet wird.

    Der Persistent Store, also die gespeicherten Daten von Core Data, liegen an einer anderen Stelle. Die URL solltest Du über die Methode defaultDirectoryURL() der Klasse NSPersistentContainer erhalten. Ich habe dies gerade mal getestet, allerdings weigert sich Xcode bei mir die Methode defaultDirectoryURL() zu kennen. ?(

    Die Default URL scheint jedoch im User Library Verzeichnis unter Containers in einem Verzeichnis mit der BundleID der App zu liegen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von MCDan ()

  • MCDan schrieb:

    DerivedData ist ja nur ein Verzeichnis von Xcode, welches beim Build der App verwendet wird.

    Der Persistent Store, also die gespeicherten Daten von Core Date liegen an einer anderen Stelle. Die URL solltest Du über die Methode defaultDirectoryURL() der Klasse NSPersistentContainer erhalten. Ich habe dies gerade mal getestet, allerdings weigert sich Xcode bei mir die Methode defaultDirectoryURL() zu kennen. ?(

    Die Default URL scheint jedoch im User Library Verzeichnis unter Containers in einem Verzeichnis mit der BundleID der App zu liegen.
    @MCDan: Die Pfadangabe habe ich mir gerade ausgeben lassen. Funktioniert wie von Dir beschrieben. :thumbup:

    Um ganz sicher zu gehen, habe ich nochmals Änderungen im CoreData-Model vorgenommen und es kam wie erwartet abermals zu besagter Fehlermeldung. Aber auch hier konnte ich keine alte Version bzw. Kopie, wie von Mattes nachgefragt, finden. Also bleibt es immer noch ein Rätsel warum es zu diesem Effekt kommt. ?( Vielleicht hat ja noch jemand eine Idee. ;)