2013-01-08 10 views
10

のルールを削除します。この関係の削除ルールはcascadeでした。この動作をNullifyに変更する必要がありました。CoreDataの移行 - 私は私の最初のcoredataモデルが関係を持つエンティティが含まれてい<code>managedObjects relationship</code></p> <p>の<code>deletion rule</code>を変更する場合にはおよそ<code>migration rules</code>何も見つからなかっきた関係

したがって、私はnew version of my coredata modelを作成しましたが、軽量移行はなく、それでも動作します。そこで、モデルの新しいバージョンを追加した場合、または削除ルールを変更すると(たとえばcascadeからnullify)、マイグレーションは実行されません。

提案がありますか?

+0

軽量移行はありませんか?したがって、永続ストアを追加するときに 'NSMigratePersistentStoresAutomaticallyOption'または' NSInferMappingModelAutomaticallyOption'を使用しないでください。 –

+0

私は私の店を作成するには、次を使用していません:コーディネータaddPersistentStoreWithType:NSSQLiteStoreType 設定: URLはnil:storeURL オプション: エラーはnil:&エラー] – Alexander

答えて

16

実行時にコアデータの動作を指定する削除規則:1つのオブジェクトが削除されると、他の関係がNULLに設定されるか、関連オブジェクトが削除されることがあります。

したがって、削除ルールはコアデータモデルにのみ保存されますが、永続ストアファイルには保存されないと仮定しました。

これを確認するには、同じエンティティで2つのコアデータモデルから2つのストアファイルを作成しましたが、削除ルールは異なります。永続的ストアmetadata辞書のNSStoreModelVersionHashesは同一でした。

実際、両方のSQLiteファイルは、永続ストアファイルのNSStoreUUIDである "Z_METADATA"テーブルの "Z_UUID"の唯一の例外と同じです。

また、ロードされたストアのバージョンハッシュがモデルのハッシュと異なる場合、addPersistentStoreWithType:...は失敗します。

したがって、削除ルールを変更することは問題ではありません。

+0

私が経験したまさにだ - 同じハッシュを。リンゴのドキュメントで、私はdeleteRulesが関連している必要があることを発見したので、私はちょうどwounderingしていた:[...]各エンティティの各プロパティについて、次の属性は等しい必要があります:name、isOptional、isTransient、 isReadOnly attributeType、リレーションシップ用destinationEntity、minCount、 maxCount、deleteRule、およびinverseRelationship [...]!あなたは変更のための新しいバージョンを作成しませんか?私は新しいものの利点を見ていません... – Alexander

+0

@アレクサンダー:私はドキュメントを参照していないことを認めなければなりません(私に場所を教えてください)?そして、あなたは 'addPersistentStoreWithType:'が動作することをテストしたので、問題は見られません。 –

+0

ここに行く(下のページ8):https://developer.apple.com/library/mac/documentation//Cocoa/Conceptual/CoreDataVersioning/CoreDataVersioning.pdf – Alexander

関連する問題

 関連する問題