Core Data Codegen alles Optionals

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

  • Core Data Codegen alles Optionals

    Mich verwirrt ein wenig, dass wenn ich meine NSManagedObject Sublcasses automatisch generieren lasse, alle Propertys Optionals sind. Vollkommen egal ob ich diese im DataModel als Optional oder nicht markiert habe.
    Da dass ganze forced unwrapping, da ich weiß der Inhalt kann nicht nil sein, in meinen Augen doch etwas unschön aussieht, überlege ich ob ich die Subclasses nicht doch wieder manual editiere, auch wenn ich das neue Codegen Feature ansonsten eigentlich echt mag. :/
    Bevor ich das tu, wollte ich jedoch Fragen ob es irgendwelche Gründe dafür gibt, dass Xcode alles als Optionals generiert.
  • Die Variablen in einer NSManagedObject-Subklasse sind ja mit @NSManaged annotiert, und werden somit in der Oberklasse verwaltet. Die Subklasse hat dafür höchstens generierte Accessoren, aber wahrscheinlich selbst das nicht.

    Normalerweise musst du eine nicht-optionale Klasse zur Konstruktionszeit initialisieren. @NSManaged hebt diese Regel auf, oder andersherum gesagt, diese Variablen können für Klassen auch nil sein, obwohl sie das gar nicht können. Das führt dann zu netten Abstürzen.
    „Meine Komplikation hatte eine Komplikation.“
  • Ich würde mal sagen, dass das gesamte Core Data ohnehin in Objective-C geschrieben ist und die Annotierung daher ohnehin keinen Schwanz interessiert. Das ist nur Deko für Swift, damit der irgendwelche Annahmen machen kann, wenn er mal wieder 3,5 h kompiliert.

    Was du allerdings im Editor angibst, ist für ein im Speicher liegendes Objekt egal. Das heißt, dass ein falls entgegen der Definition eine Property nil sein sollte, dies ja erst beim Speichern auffällt. Swift will aber schon vorher abstürzen.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Der umgekehrte Fall geht genauso in die Hose: Du greifst auf die Property zu, obwohl ihr noch gar keine Objektreferenz zugewiesen wurde. Das CoreData-Objekt liefert also nil. Die Swift-Runtime versucht dann, weil es kein Optional ist, nil zu dereferenzieren, was natürlich suboptimal ist, und der Programmierer an der rosa Zeile in Xcode sieht. ;)
    „Meine Komplikation hatte eine Komplikation.“