【发布时间】:2010-12-05 23:49:45
【问题描述】:
我使用 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 到 Book N 与一个 Owner ("alexpreynolds, 123456") 相关联。
我将其解析为一个Owner 实例和一个由Book 实例组成的NSMutableSet。
当我第一次尝试保存时,它保存得很好,合并的数据显示在表格视图中。
然而,在第二次保存时,当 XML 内容包含一本新书时,它就不起作用了。
会发生什么:
然后,我尝试加载一个 XML 文档,该文档包含一个新的Book,该新的Book 尚未在主托管对象上下文中。新的Book 使用与其他Books 关联的Owner。
我有例程可以挑选出这个独特的Owner 托管对象(我已经在我的主要托管对象上下文中拥有)和独特的Book,没有在主要 MOC 中找到。
据此,我在辅助 MOC 中创建了一个新的 Book 对象,并将其“owner”关系设置为指向我在主 MOC 中找到的唯一 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;
}))'
如何在辅助 MOC 中创建新的 Book 实体,以便我仍然可以将其与主 MOC 中预先存在的 Owner 关联?
【问题讨论】:
标签: iphone core-data nsfetchedresultscontroller