【发布时间】:2015-05-27 14:22:32
【问题描述】:
在创建两个对象之间的关系时,非法尝试在不同上下文中的对象之间建立关系“userInfo”。但是他们有共同的持久协调者和相同的上下文。请帮我找出问题。
- (void)parser:(NSDictionary *)attributeDict
{
NSEntityDescription *ent = [NSEntityDescription entityForName:@"ThreadInfo" inManagedObjectContext:self.managedObjectContext];
// create an ThreadInfo managed object, but don't insert it in our moc yet
ThreadInfo *info = [[ThreadInfo alloc] initWithEntity:ent insertIntoManagedObjectContext:nil];
self.threadinfo = info;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"UserInfo" inManagedObjectContext:self.managedObjectContext];
fetchRequest.entity = entity;
// narrow the fetch to these two properties
NSPredicate *threadPredicate = [NSPredicate predicateWithFormat:@"userEmail == %@",[attributeDict valueForKey:@"userEmail"]];
[fetchRequest setPredicate:threadPredicate];
NSError *error = nil;
NSArray *fetchedItems = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
for (UserInfo *info in fetchedItems)
{
if([[attributeDict allKeys] containsObject:@"userEmail"])
{
if([attributeDict valueForKey:@"userEmail"]!=[NSNull null])
{
self.threadinfo.userEmail=[attributeDict valueForKey:@"userEmail"];
}
}
if([[attributeDict allKeys] containsObject:@"thread"])
{
if([attributeDict valueForKey:@"thread"]!=[NSNull null])
{
self.threadinfo.threadID=[attributeDict valueForKey:@"thread"];
}
}
if(info!=nil)
{
self.threadinfo.userInfo=info;// **CRASH HAPPENED AT THIS LINE**
[info addThreadDetailsObject:self.threadinfo];
}
ThreadInfo *tInfo = nil;
[self.managedObjectContext insertObject:tInfo];
if ([self.managedObjectContext hasChanges]) {
if (![self.managedObjectContext save:&error]) {
NSLog(@"Unresolved error %@", error);
abort();
}
}
.h
@interface batchSave : NSOperation
@property (nonatomic, strong) ThreadInfo *threadinfo;
@property (nonatomic, strong) UserInfo *userInfos;
崩溃
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Illegal attempt to establish a relationship 'userInfo' between objects in different contexts source = <ThreadInfo: 0x17dd8280> (entity: ThreadInfo; id: 0x17dda6a0 <x-coredata:///ThreadInfo/t908A5944-FCD9-422B-80D7-83B71D243FB52>
【问题讨论】: