我在核心数据中有两个表,比如表TA和表TB,TA与TB有一对多的关系。 TA中有一条记录A1,我希望在for循环中将TB映射到A1的几条记录(B1,B2,..)。 在第一次迭代中,我查询db并获取A1,调用addTBObject:B1并且没有保存上下文。 在下一次迭代中,再次查询以获取A1,但它返回nil。 (太奇怪了......)
如果我在第一次交互中保存上下文,那么在下一次迭代中再次获得A1是可以的。但我不认为这是一个更好的做法,这将导致许多保存动作在一个for循环中。
有人可以帮忙吗?欣赏!
代码提取:
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...
}
}
}
答案 0 :(得分:0)
我改变代码后使用[NSFetchRequest fetchRequestWithEntityName:@“TabelB”],这一切都已经完成了! for循环总是可以在每次迭代中获得托管对象B而不再保存。
进一步看,这是否意味着某个实体的NSFetchRequest只能在提交之前初始化一次(一个事务)?
原始代码:
NSFetchRequest* fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"xxx" inManagedObjectContext:context]];
现在:
NSFetchRequest* request = [NSFetchRequest fetchRequestWithEntityName:@"xxx"];