CoreDataBooks
バックグラウンドでセカンダリ管理オブジェクト コンテキストにデータを取り込み、そのデータをプライマリ管理オブジェクト コンテキストにマージするための基礎として、Apple のサンプル アプリケーションを使用しています。
私が引き込んでいるデータは、エンティティ (「所有者」と呼ばれる) とBook
の対 1 関係を持つエンティティです。エンティティは(「本」と呼ばれる) と対多Owner
のOwner
関係にあります。Book
私のデータは、次の形式の XML ドキュメントです。
<Owner>
<Name>alexpreynolds</Name>
<ID>123456</ID>
</Owner>
<Books>
<Book>Book One</Book>
<Book>Book Two</Book>
...
<Book>Book N</Book>
</Books>
Book One
~は 1 つ( )Book N
に関連付けられています。Owner
"alexpreynolds, 123456"
Owner
これをインスタンスとインスタンスでNSMutableSet
構成されたものに解析していBook
ます。
初めて保存しようとすると、問題なく保存され、マージされたデータがテーブル ビューに表示されます。
ただし、2 回目の保存では、XML コンテンツに新しい本が含まれていると、機能しません。
何が起こるかは次のとおりです。
Book
次に、まだプライマリ管理対象オブジェクト コンテキストにない新しい を含む XML ドキュメントをロードしようとしました。新しいは、他の に関連付けられているものとBook
同じものを使用しています。Owner
Book
Owner
この一意の管理オブジェクト (プライマリ管理オブジェクト コンテキストに既にある) と、プライマリ MOC にBook
ない一意のオブジェクトを選択するルーチンがあります。
これからBook
、セカンダリ MOC に新しいオブジェクトを作成し、その " " 関係をプライマリ MOC で見つけowner
た一意のものを指すように設定します。Owner
保存すると、次のエラーが表示されます。
*** Terminating app due to uncaught
exception 'NSInvalidArgumentException',
reason: 'Illegal attempt to establish a
relationship 'owner' between objects in
different contexts
(source = <Book: 0x7803590>
(entity: Book; id: 0x7802ae0 <x-coredata:///
Book/t527F06B2-3EB5-47CF-9A29-985B0D3758862>
; data: {
creationDate = 2009-10-12 06:01:53 -0700;
name = nil;
nameInitial = nil;
operations = (
);
owner = nil;
type = 0;
}) ,
destination = <Owner: 0x78020a0> (entity:
Owner; id: 0x3a56f80 <x-coredata://043AF2F0-1AD0-
4078-A5E8-E9D7071D67D1/Owner/p1> ; data: {
books = "<relationship fault: 0x7801bf0 'books'>";
displayName = alexpreynolds;
ownerID = 123456;
}))'
Book
セカンダリ MOC に新しいエンティティを作成して、プライマリ MOC の既存のエンティティと引き続き関連付けることができるようにするにはどうすればよいOwner
ですか?