gpt4 book ai didi

iphone - 非法尝试在不同上下文中的对象之间建立关系 'xyz'

转载 作者:行者123 更新时间:2023-12-03 18:12:22 26 4
gpt4 key购买 nike

我使用 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>

第一本书第一本书与一个所有者相关联(“alexpreynolds,123456”)。

我将其解析为一个 Owner 实例和一个由 Book 实例组成的 NSMutableSet

当我第一次尝试保存时,它保存得很好并且合并的数据显示在表格 View 中。

但是,在第二次保存时,当 XML 内容包含新书时,它不起作用。

发生的情况是这样的:

然后,我尝试加载一个 XML 文档,其中包含尚未在主托管对象上下文中的新 Book。新Book 使用与其他Book 关联的相同Owner

我有一些例程可以挑选出这个唯一的Owner托管对象(我已经在我的主要托管对象上下文中)和不存在的唯一Book 在主要 MOC 中发现。

由此,我在辅助 MOC 中创建一个新的 Book 对象,并将其“owner”关系设置为指向唯一的Owner code> 我在主要 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;
}))'

如何在辅助 MOC 中创建新的 Book 实体,以便我仍然可以将其与主 MOC 中预先存在的 Owner 关联?

最佳答案

不同托管对象上下文中的对象之间不能存在关系。因此解决这个问题的一种方法是将对象带入托管对象上下文。

例如:

NSManagedObject *book = // get a book in one MOC
NSManagedObject *owner = // get an owner in a different MOC
[[owner mutableSetValueForKey:@"books"] addObject:[owner.managedObjectContext objectWithID:[book objectID]]];

因此,您所做的实际上是将 Book 提取到与 owner 相同的托管对象上下文中。但请记住,这只有在 book 已保存的情况下才可能实现。托管对象上下文将在持久存储中查找对象,因此必须首先保存它。

关于iphone - 非法尝试在不同上下文中的对象之间建立关系 'xyz',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1554623/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com