私はCore Dataは、すべての設定およびiOSアプリで働く、と私は、私は可能性を準備するためにコアデータの移行にいくつかのチュートリアルを読んでてきた[[MyEntityClass alloc] initWithEntity:description insertIntoManagedObjectContext:context];
コアデータ軽量移行 - 既存のエンティティに新しい属性が追加されていますか?
を使用してインスタンス化されNSManagedObjectのサブクラスを使用しているオブジェクトモデルを管理しています将来のアプリのアップデート。この特定のケースで現在想定している変更については、軽量な移行で十分であると確信しています。私は、軽量の移行で古いデータモデルのデータを新しいバージョンにマッピングすることを理解しています。しかし、永続ストアに移行前に作成されたNSManagedObjectサブクラスインスタンスが含まれている場合、これらのオブジェクトはモデルとともに変更され、移行で追加された属性を使用できるようになりますか?
私が尋ねていることを明確にしているかどうかを確認する例を挙げます。古典的な例であるPerson
を使用するエンティティがあるとします。人は次の属性があります。
firstname
lastname
私はPerson
と呼ばれるaPerson
のインスタンスを作成して、これが永続ストアに挿入されています。私はaPerson.firstname
とaPerson.lastname
を使ってaPerson
の属性にアクセスできます。
今、私は管理オブジェクトモデルにdateofbirth
属性を追加し、そのPerson
エンティティは以下の属性が含まれています。私は永続ストアからaPerson
を取得し、アクセスaPerson.dateofbirth
しようとした場合
firstname
lastname
dateofbirth
を、どうなりますか? aPerson
にはその属性を追加する前に作成されたdateofbirth
属性が含まれていないため、認識できないセレクタエラーが発生しますか?または軽量の移行は、dateofbirth
属性とアクセサメソッドをすべて永続ストア内のPerson
のすべてのインスタンスに追加しますか?
ありがとう、非常に助かりました!したがって、存在しない属性に対処すると言うと、それは 'if([myEntity respondsToSelector:@selector(myMigratedAttributeName)){...}'のようなものになります。 – mashers
メソッドはインスタンスではなくクラスにあります。プロパティを読み、それが 'nil'であるかどうかを確認します。 –
'メソッドはインスタンスではなくクラスにあります。 ' - はい。ただし、' respondsToSelector: 'ではなく、NSManagedObjectサブクラスにプロパティが存在することを確認しますか?データ移行が追加されたプロパティにアクセスしようとする前にエンティティサブクラスが作成された場合は、nilを返すか、認識できないセレクタ例外が発生しますか? – mashers