我使用 Apple 的CoreDataBooks
示例应用程序作为在后台将数据拉入辅助托管对象上下文的基础,然后将该数据合并到主要托管对象上下文中。
我要提取的数据是与实体(称为“所有者”)Book
具有一对一关系的实体。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
throughBook N
与一个Owner
( "alexpreynolds, 123456"
) 相关联。
我将其解析为一个Owner
实例和一个NSMutableSet
由实例组成的Book
实例。
当我第一次尝试保存时,它保存得很好,合并的数据显示在表格视图中。
然而,在第二次保存时,当 XML 内容包含一本新书时,它就不起作用了。
这是发生的事情:
然后我尝试加载一个 XML 文档,该文档包含一个Book
尚未在主托管对象上下文中的新对象。新Book
的使用与其他sOwner
关联的相同。Book
我有一些例程可以挑选出这个唯一的Owner
托管对象(我已经在我的主托管对象上下文中拥有)和在主 MOC 中找不到Book
的唯一对象。
由此,我Book
在辅助 MOC 中创建了一个新对象,并将其“ owner
”关系设置为指向Owner
我在主 MOC 中找到的唯一对象。
当我保存时,我收到以下错误:
*** 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 中创建一个新实体,以便我仍然可以将它与Owner
主 MOC 中预先存在的实体相关联?