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同じものを使用しています。OwnerBook
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ですか?