2016-01-13 129 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] 
相關問題