Ich habe ein Core Data-Objektmodell alle verwalteten in einer iOS-App einzurichten und zu arbeiten, und ich bin mit NSManagedObject Subklassen, die [[MyEntityClass alloc] initWithEntity:description insertIntoManagedObjectContext:context];
instanziiert verwendenLeichtgewichtige Migration von Core Data - werden vorhandenen Entitäten neue Attribute hinzugefügt?
ich einige Tutorials auf Core Data Migrationen gelesen haben für möglich vorzubereiten zukünftige Updates für die App. Für die Änderungen, die ich derzeit für diesen speziellen Fall vorschlage, bin ich zuversichtlich, dass eine leichte Migration ausreichend sein wird. Ich verstehe, dass die einfache Migration die Daten vom alten Datenmodell auf die neue Version abbildet. Aber eine Sache ist mir nicht klar. Wenn der persistente Speicher NSMagedObject-Unterklassen-Instanzen enthält, die vor der Migration erstellt wurden, werden diese Objekte zusammen mit dem Modell geändert, damit sie die in der Migration hinzugefügten Attribute verwenden können?
Ich werde ein Beispiel geben, um sicherzustellen, dass ich klar darüber bin, was ich verlange. Sagen wir, ich habe eine Entität aufgerufen, um das klassische Beispiel zu verwenden, Person
. Person hat folgende Attribute:
firstname
lastname
ich eine Instanz von Person
genannt aPerson
und dies wird in den persistenten Speicher eingefügt. Ich kann auf die Attribute aPerson
unter Verwendung von aPerson.firstname
und aPerson.lastname
zugreifen.
Jetzt füge ich ein dateofbirth
Attribut auf das Objektmodell verwaltet werden, so dass die Person
Einheit enthält folgende Attribute:
firstname
lastname
dateofbirth
Nun, was passiert, wenn ich aPerson
aus dem persistenten Speicher abrufen und versuchen aPerson.dateofbirth
zugreifen? Erhalte ich einen nicht erkannten Selektorfehler, weil aPerson
das Attribut dateofbirth
nicht enthält, weil es vor dem Hinzufügen dieses Attributs erstellt wurde? Oder fügt die Lightweight-Migration das Attribut dateofbirth
und die Zugriffsmethoden allen Instanzen von Person
hinzu, die sich bereits im persistenten Speicher befinden?
Vielen Dank, das ist sehr hilfreich! Wenn Sie also sagen, dass das Attribut nicht vorhanden ist, würde das etwas wie "if ([myEntity responseToSelector: @selector (myMigratedAttributeName)) {...}' – mashers
Nein, Methoden betreffen Klassen, nicht Instanzen. Sie lesen die Eigenschaft und sehen, ob es "Null" ist. –
'Methoden sind auf Klassen, nicht auf Instanzen '- Ja, aber würde nicht' antwortenToSelector: 'überprüfen, dass die Eigenschaft in der NSManagedObject-Unterklasse vorhanden ist? Wenn die Entitätsunterklasse erstellt wurde, bevor die Datenmigration versucht hat, auf die hinzugefügte Eigenschaft zuzugreifen, geben Sie einfach nil zurück oder würde dies zu einer nicht erkannten Selektorausnahme führen? – mashers