7

iOS 6.0.1のCoreData管理対象オブジェクトコンテキストをSQLiteストアに保存すると、奇妙な「CoreDataは永続的なストア間の関係をサポートしていません」という例外が発生します。これは、モデル内のQuotesとAbstractSourcesの間の1対1の関係に関係しています。実行時には、QuoteとBookに関係します(BookはAbstractSourceから継承します。すべてモデルエディターで正常に機能します)。

私は同様の報告を調査し、報告された原因を取り上げました。

  1. 私は、assignObject:toPersistentStore:を使用して、QuoteとBookの両方を同じ永続ストアに割り当てているので、どちらも割り当てられていないままです。
  2. エラーの説明は、すべての「絶対」x-coredata IDが同じプレフィックスで始まることを示しています(例:「x-coredata:// 82B3BEB3-60F2-4912-AC80-11AAD29CFF99 /」)。したがって、実際には1つのストアのみが使用されているようです。 。

私の質問は次のとおりです。

  1. 他に確認する必要があるものはありますか(おそらく、ソースでタッチ/制御していないAbstractSourceに関連していますか?initWithEntity:insertIntoManagedObjectContextをそれぞれ呼び出してQuoteとBookの両方を作成しています)。
  2. エラーの説明には、いくつかの「相対的な」x-coredata ID(「x-coredata:///...」の形式)も含まれていることに気付きました。「絶対」プレフィックス(上記の例を参照)が同じであっても、絶対形式は常に「クロスデータベース」と見なされる可能性がありますか?もしそうなら、「絶対」と「相対」のx-coredata IDの選択にどのように影響を与えることができますか?

あなたの注意のためにThx(大いに)!

4

1 に答える 1

1

したがって、これが(おそらく)問題を引き起こしたものです:

  1. 管理対象オブジェクトコンテキストのコーディネーターは、2つの永続ストアを管理する必要があります。これで、Quote and Bookを割り当てて保存したかったものが、起動時にリセットされます。このコードにバグがあり、このストアが使用できなくなりました。2つ目が利用可能だったので、それは静かに引き継ぎました。この場合、望ましくない結果につながりました。レッスン:コアデータスタックを設定した後、実際に2つのストアが存在する/残っていると断言します。
  2. Core Dataモデルの初期の開発中に、モデルエディターでそのエンティティの一部の名前を変更しました。誤って名前を変更しただけで、エンティティクラスのプロパティは変更していません。したがって、実際には、モデルエディタですべてが正常に機能している間、実行時に予期しないクラスが使用されたため、予期しない/間違ったストアにも予期しないクラスが割り当てられました。レッスン:エンティティ名とそのクラスプロパティが完全に同期していることを確認します(他の状況が許す限り)。

この問題は解決されました。また、コード/モデルをリファクタリングして、明示的な割り当ての代わりに(重複しない)構成を使用するようにしました。これも今後の役に立ちます。

繰り返しますが、あなたの注意のためのthx

于 2012-12-02T17:42:44.103 に答える