CoreData关系保存问题

时间:2013-04-12 07:38:19

标签: ios core-data

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

1 个答案:

答案 0 :(得分:0)

似乎找到了这个问题的线索。 在getManagedObjBById的实现中,每次启动NSFetchRequest,如果每次迭代中没有提交,则获取请求将在下一次迭代中返回nil。

我改变代码后使用[NSFetchRequest fetchRequestWithEntityName:@“TabelB”],这一切都已经完成了! for循环总是可以在每次迭代中获得托管对象B而不再保存。

进一步看,这是否意味着某个实体的NSFetchRequest只能在提交之前初始化一次(一个事务)?

原始代码:

NSFetchRequest* fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"xxx" inManagedObjectContext:context]];

现在:

NSFetchRequest* request = [NSFetchRequest fetchRequestWithEntityName:@"xxx"];