核心数据:添加关系对象,以现有的对象
问题描述:
我在我的核心数据核心数据:添加关系对象,以现有的对象
- 消息
- 部
其中关系如下下列实体。
- 消息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
上下文完成的。
任何建议或帮助,将不胜感激。
答
您需要使用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'对象已经存储。 –
答
看起来部门是从不同的上下文获取的,您需要从同一个上下文中获取部门对象。试试,如果这个工程:
Department *objDepartment = [self findDepartmentByDepartmentId:dict[kDepartmentId]];
// Get department in in current context
NSError *error = nil;
objDepartment = [context objectWithID:objDepartment.objectId error:&error]
PLZ提到错误日志 – Muneeba
@Muneeba我添加了一些错误日志。 –
你确定你正在为部门和消息使用相同的managedObjectcontext吗?或者您正在使用多个托管对象上下文? – Muneeba