单一上下文但“非法尝试在不同上下文中的对象之间建立关系‘xyz’
Posted
技术标签:
【中文标题】单一上下文但“非法尝试在不同上下文中的对象之间建立关系‘xyz’【英文标题】:single context but "Illegal attempt to establish a relationship 'xyz' between objects in different contexts 【发布时间】:2013-04-24 16:58:41 【问题描述】:我有一个上下文,我想在上下文中的一个现有对象(Veranstaltung)和一个新对象(Ticket)之间创建一个关系。 p>
NSManagedObjectContext *managedObjectContext = [self managedObjectContext]; //constructor get the Context from the appDelegate
Ticket *ticket = [NSEntityDescription insertNewObjectForEntityForName:@"Ticket" inManagedObjectContext:managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Veranstaltung" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"vID == %@", veranstaltung.vID];
[fetchRequest setPredicate:predicate];
NSError *error = nil;
NSArray *fetchedRequests = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
NSLog(@"FetchedRequests count: %d", fetchedRequests.count);
if(fetchedRequests !=nil)
[ticket setEvent:fetchedRequests[0]];
在设置事件时,应用程序崩溃.. 有人有想法吗?谢谢!
【问题讨论】:
报错中提到的关系是什么?其实不是'xyz'
,是吗?
啊每次我都没有提到,这不是“票”,它的“gekauftesTicket”,“票”到“Veranstaltung”的倒数
@Jonathan 你是怎么解决你的问题的?
【参考方案1】:
从错误信息来看,Core Data 似乎感觉Ticket
和Veranstaltung
是在不同的上下文中。查看前几行代码...
[self managedObjectContext]; //constructor get the Context from the appDelegate
Ticket *ticket = [NSEntityDescription insertNewObjectForEntityForName:@"Ticket" inManagedObjectContext:managedObjectContext];
看起来您在其中一行遗漏了一些内容,结果是第二行的managedObjectContext
不是您想的那样。您的意思可能是:
NSManagedObjectContext *managedObjectContext = [self managedObjectContext]; //constructor get the Context from the appDelegate
否则:
Ticket *ticket = [NSEntityDescription insertNewObjectForEntityForName:@"Ticket" inManagedObjectContext:[self managedObjectContext]];
事实上,第一行没有做任何有用的事情,因为结果被丢弃了。我建议将第二行放在第三行之后,并在任何地方使用第三行中的 context
局部变量。
【讨论】:
哦,对不起,我忘了说,managedObjectContext 之前已初始化(我试图缩短它) 那么为什么需要managedObjctContext
和context
局部变量呢?如果这确实是您的代码的样子,那么它们都指向相同的上下文。如果您的真实代码不同,则它们有可能指向不同的上下文并且可以解释错误。为 ticket
和您的 fetch 请求使用单个本地上下文指针消除了上下文不同的可能性。
是的,你说得对,好点。我用 managedObjectContext 替换了上下文,但这并不能解决问题
请注意,您不能在不同的数据存储之间创建关系。如果您的门票在一家商店,而活动在另一家商店,那可能就是问题所在。也许这是一个措辞不当的错误信息。
“商店”是什么意思?我有一个带有实体 Veranstaltung、Tickets 等的模型。所以首先我创建了一些“Veranstaltung”(事件;))然后我想购买一张票并将其保存在相同的模型和上下文中,我想创建一个关系门票和活动以上是关于单一上下文但“非法尝试在不同上下文中的对象之间建立关系‘xyz’的主要内容,如果未能解决你的问题,请参考以下文章
NSInvalidArgumentException:非法尝试在不同上下文中的对象之间建立关系