Ios CoreData关系保存问题
我在核心数据中有两个表,比如表TA和表TB,TA与TB有一对多的关系。 TA中有一条记录A1,我希望TB中有多条记录(B1、B2、…)映射到for循环中的A1。 在第一次迭代中,我查询db并获取A1,调用addTBObject:B1,但没有保存上下文。 在下一次迭代中,再次查询以获得A1,但返回nil。(真奇怪……) 如果我在第一次迭代中保存上下文,那么在下一次迭代中再次获得A1是可以的。但我不认为这是一种更好的做法,它会导致在一个for循环中执行许多save操作 有人能帮忙吗?谢谢你 代码摘录:Ios CoreData关系保存问题,ios,core-data,Ios,Core Data,我在核心数据中有两个表,比如表TA和表TB,TA与TB有一对多的关系。 TA中有一条记录A1,我希望TB中有多条记录(B1、B2、…)映射到for循环中的A1。 在第一次迭代中,我查询db并获取A1,调用addTBObject:B1,但没有保存上下文。 在下一次迭代中,再次查询以获得A1,但返回nil。(真奇怪……) 如果我在第一次迭代中保存上下文,那么在下一次迭代中再次获得A1是可以的。但我不认为这是一种更好的做法,它会导致在一个for循环中执行许多save操作 有人能帮忙吗?谢谢你 代码摘录
NSString* objBId = @"xxx";
for (int i=0; i< [dataArray count]; i++) {
ObjA obj = [dataArray objectAtIndex:i];
NSManagedObject* moObjA = [self getManagedObjAById:obj.objId inContext:context];
if(moObjA)
{
NSManagedObject* moObjB = [self getManagedObjBById:objBId inContext:context];
if (moObjB != nil)
{
[moObjB addAObject:moObjA];
[self saveDB:context]; //if don't save here, moObjB will be nil in the next iteration...
}
}
}
NSString*objBId=@“xxx”;
对于(int i=0;i<[dataArray count];i++){
ObjA obj=[dataArray objectAtIndex:i];
NSManagedObject*moObjA=[self-getManagedObjAById:obj.objId inContext:context];
if(moObjA)
{
NSManagedObject*moObjB=[self-getManagedObjBById:objBId inContext:context];
如果(moObjB!=nil)
{
[moObjB addAObject:moObjA];
[self-saveDB:context];//如果不在此处保存,moObjB在下一次迭代中将为零。。。
}
}
}
似乎找到了这个问题的线索。
在GetManagedObjById的实现中,每次都会启动NSFetchRequest,如果每次迭代中都没有提交,那么在下一次迭代中,fetch请求将返回nil
在我将代码更改为使用[NSFetchRequest fetchRequestWithEntityName:@“TabelB”]之后,一切都设置好了!for循环总是可以在每次迭代中获得托管对象B,而无需再保存
进一步看,这是否意味着特定实体的NSFetchRequest只能在提交(一个事务)之前初始化一次
来源代码:
NSFetchRequest* fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"xxx" inManagedObjectContext:context]];
现在:
请分享一些代码。刚刚更新,谢谢!您确定getManagedObj_ById实现正确吗?此外,还应检查您的关系是否正确设置。除此之外,我看不到任何可疑的东西。因此,如果一切设置正确,saveDB可以放在for循环完成之后?当然。为什么你甚至要在一个内部循环中添加对象,而不是一次抓住一个集合并添加所有对象?
NSFetchRequest* request = [NSFetchRequest fetchRequestWithEntityName:@"xxx"];