单个上下文但“非法尝试在不同上下文中的对象之间建立关系'xyz'

时间:2013-04-24 16:58:41

标签: iphone exception nsfetchrequest

我有一个上下文,我想在上下文中创建一个关系(Veranstaltung)和一个新的(Ticket)

 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]];

在设置事件时,应用程序崩溃.. 有人有个主意吗?谢谢!

1 个答案:

答案 0 :(得分:0)

从错误消息中,Core Data似乎认为TicketVeranstaltung处于不同的上下文中。查看前几行代码......

[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局部变量。