Ios CoreData关系保存问题

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操作 有人能帮忙吗?谢谢你 代码摘录

我在核心数据中有两个表,比如表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"];