2016-01-13 135 views
0

我在我的核心数据核心数据:添加关系对象,以现有的对象

  • 消息

其中关系如下下列实体。

  • 消息hasDepartment(一个)
  • 部hasMessage(许多)

部门已经插入的核心数据。当新消息到达时,我将它插入核心数据并添加部门关系,但应用程序崩溃并出现以下错误。

***终止应用程序由于未捕获的异常“NSInvalidArgumentException”,理由是:“非法尝试建立关系‘在不同的上下文

以下对象之间的部门’是我的代码片段设置消息对象

NSEntityDescription *entity = [NSEntityDescription entityForName:entityName inManagedObjectContext:context]; 

// find department object from core data. 
Department *objDepartment = [self findDepartmentByDepartmentId:dict[kDepartmentId]]; 
// Create new message object 
Message *objMessage = [[Message alloc] initWithEntity:entity insertIntoManagedObjectContext:context]; 
    // *** Establish relation with department *** 
    if(objDepartment != nil) 
    { 
     // app crashes here... 
     [objMessage setDepartment:objDepartment]; 
    } 
    [objMessage setLastUpdatedTime:[NSDate date]]; 
} 

// *** Set other values in message object *** 

注意:一切都是在核心数据中使用Parent-Child上下文完成的。

任何建议或帮助,将不胜感激。

+0

PLZ提到错误日志 – Muneeba

+0

@Muneeba我添加了一些错误日志。 –

+0

你确定你正在为部门和消息使用相同的managedObjectcontext吗?或者您正在使用多个托管对象上下文? – Muneeba

回答

0

您需要使用NSFetchRequest

// find department object from core data. 
Department *objDepartment = [self findDepartmentByDepartmentId:dict[kDepartmentId]]; 
NSFetchRequest *fetchRequest=[NSFetchRequest fetchRequestWithEntityName:@"Message"]; 
NSPredicate *predicate=[NSPredicate predicateWithFormat:@"Message==%@",txtMessage]; // If required to fetch specific vehicle 
fetchRequest.predicate=predicate; 
Message *objMessage = [[context executeFetchRequest:fetchRequest error:nil] lastObject]; 
if(objDepartment != nil) 
{ 
    // app crashes here... 
    [objMessage setDepartment:objDepartment]; 
} 
[objMessage setLastUpdatedTime:[NSDate date]]; 
NSError *error; 
if (![context save:&error]) { 
    NSLog(@"Whoops, couldn't Update: %@", [error localizedDescription]); 
    } 
    else{ 
     //updated successfully 
} 

//插入新记录

Message *objMessage = [NSEntityDescription insertNewObjectForEntityForName:entityName inManagedObjectContext:context]; 

希望它可以帮助你更新获取特定的记录...!

+0

我正在添加新的'Message'对象,而'Department'对象已经存储。 –

1

看起来部门是从不同的上下文获取的,您需要从同一个上下文中获取部门对象。试试,如果这个工程:

Department *objDepartment = [self findDepartmentByDepartmentId:dict[kDepartmentId]]; 

// Get department in in current context 
NSError *error = nil; 
objDepartment = [context objectWithID:objDepartment.objectId error:&error] 
相关问题