wake-up-neo.com

NSManagedObject mit Swift 3 und Xcode 8 Beta untergliedern

Ich habe angefangen, Core Data mit Swift 3 und Xcode 8 Beta zu verwenden. Wenn ich versuche, NSManagedObject-Unterklassen aus dem Kerndatenmodell und der Option "NSManagedObject-Unterklasse erstellen" im Editormenü zu generieren, generiert Xcode 8 beta drei Dateien, von denen eine COREDATA_DATAMODELNAME + CoreDataModel.Swift mit folgendem Inhalt ist:

import Foundation
import CoreData

___COREDATA_DATAMODEL_MANAGEDOBJECTCLASSES_IMPLEMENTATIONS___

Zusätzlich enthält der Inhalt dieser Datei zwei Warnungen:

Expressions are not allowed at the top level.
Use of unresolved identifier '___COREDATA_DATAMODEL_MANAGEDOBJECTCLASSES_IMPLEMENTATIONS___'

Hat jemand das gleiche Problem gesehen? Was bedeutet diese neue Datei?

Vielen Dank

19
RFG

Es ist wahrscheinlich ein (Beta-) Konflikt mit der neuen automatischen Unterklassengenerierung, die im Entitätsinspektor der Datenmodelldatei gesteuert werden kann.

Aus der Dokumentation (Neuerungen in den Kerndaten)

Xcode automatische Unterklassengenerierung

Xcode unterstützt jetzt die automatische Erzeugung von NSManagedObject-Unterklassen im Modellierungswerkzeug. Im Entitätsinspektor:

  • Manual/None ist die Standardeinstellung und das vorherige Verhalten. in diesem Fall können Sie sollte eine eigene Unterklasse implementieren oder NSManagedObject verwenden.
  • Category/Extension generiert eine Klassenerweiterung in einer Datei mit dem Namen ClassName+CoreDataGeneratedProperties. Sie müssen deklarieren/implementieren die Hauptklasse (wenn in Obj-C über einen Header die Erweiterung .__ mit dem Namen ClassName.h importiert werden kann). - 
  • Class Definition generiert Unterklassendateien mit dem Namen wie ClassName+CoreDataClass sowie die für .__ generierten Dateien. Kategorie/Erweiterung. 

Die generierten Dateien werden in DerivedData und .__ abgelegt. Wird beim ersten Build nach dem Speichern des Modells neu erstellt. Sie sind auch von Xcode indiziert, also Befehlstaste auf Referenzen klicken und schnell öffnen von Dateinamen funktioniert.

44
vadian

Ich bin auf das Problem mit der oben genannten .Swift-Datei gestoßen und habe festgestellt, dass das Kommentieren der ___ COREDATA ... -Linie mich durch den Fehler fürs Erste geholt hat. Ich bin nicht sicher, was es erreichen soll.

Ich finde auch, dass XCODE 8 die Tendenz hat, neue Felder zu vergessen, die zu CoreData-Entitäten hinzugefügt werden, und das CoreData-Modellcode-Generierungsziel wiederholt auf Objective C zurückzusetzen, was dazu führt, dass .h- und .m-Dateien anstelle von Swift fließen Dateien, wenn Dateien neu generiert werden. Die meisten Probleme, die ich gesehen habe, waren auf CoreData bezogen, waren aber bisher durchführbar.

Abgesehen davon war XCODE 8 überraschend solide und arbeitete mit einer App mit 25 Datenentitäten und über 30 View-Controllern. Ich beschwere mich also nicht. 

0
Ron Diel

Ich habe ähnliche Probleme mit diesem Entwickler-Beta-Code Xcode 8. Einige von ihnen lösten Command + S (Änderungen speichern), bevor ich Data Model verlasse oder NSManagedObject-Unterklassen generiere. Ich weiß nicht warum, aber in meinem Fall hat das automatische Speichern manchmal nicht funktioniert und es treten Fehler auf.

0
Adam Smaka