Ich habe Schwierigkeiten mit Core Data in Xcode 8 Beta 1. Alte Apps kompilieren und laufen gut, aber alle neuen Anwendungen kompilieren und laufen gut, bis sie versuchen, ein neues NSManagedObject einzufügen.
Anfangs dachte ich, es hätte etwas damit zu tun, ein altes xcdatamodel falsch zu löschen und ein anderes zu erstellen, aber nachdem ich eine brandneue App erstellt und eine einfache Entity "A" erstellt habe, kann ich zur Laufzeit kein Objekt der Klasse A erstellen .
Ich habe versucht, let a = A(context: myMOC)
zu verwenden, was den Fehler zurückgibt:
Ein NSManagedObject der Klasse 'MyApp.A' muss eine gültige NSEntityDescription haben.
Wenn Sie das alte let a = NSEntityDescription.insertNewObject(forEntityName: "A", into: context) as! A
versuchen, wird der Fehler zurückgegeben:
Konnte keinen Wert des Typs 'NSManagedObject_A_' umsetzen (0x7fd114626f80) zu 'MyApp.A' (0x10d2fdf28).
Ich habe mein xcdatamodel ein Dutzend Mal überprüft, um sicherzustellen, dass ich alles richtig geschrieben habe, und habe ein neues Projekt zum Testen erstellt, um sicherzustellen, dass ich keine Fehler beim Einrichten der CD gemacht habe. Gedanken?
UPDATE: Der Inhalt des Pakets xcdatamodel lautet wie folgt:
%Vor%UPDATE 2: Beim Drucken der Entitäten von managedObjectModel wird angezeigt, dass das richtige Modell geladen wird. Trotzdem kann ich kein NSManagedObject in einem neuen Projekt initialisieren.
Ich habe es endlich herausgefunden:
In Xcode 7 müssten Sie den Klassennamen eingeben und in Swift das Modul auf "Current Project Module" setzen. Ich nahm an, dass das in Xcode 8 nicht mehr nötig wäre, da es automatisch die Quelldateien generiert. Sie müssen den Klassennamen jedoch manuell auf den Namen der generierten Klasse setzen, damit Xcode @objc(ClassName)
erzeugt (ich habe keine Ahnung, warum diese Annotation benötigt wird - manuell erstellte Klassen für CoreData-Entitäten funktionieren ohne sie für mich). Außerdem müssen Sie das Modul NICHT manuell setzen, da Xcode die generierte Klasse sonst nicht mehr finden kann.
Ich hatte den gleichen Fehler. In meinem Fall musste ich die Swift-Klasse der Objective-C-Laufzeit aussetzen. Fügen Sie dazu @objc(ModelClass)
vor der Swift-Klassendeklaration wie folgt hinzu:
Das Korrigieren des NSPersistentContainer-Namens in AppDelegate funktionierte für mich.
%Vor%