2013-04-12 169 views
1

我在覈心數據中有兩個表,比如表TA和表TB,TA與TB有一對多的關係。 在TA中有一條記錄A1,我想在for循環中將幾條記錄(B1,B2,...)映射到A1。 在第一次迭代中,我查詢數據庫並獲得A1,調用addTBObject:B1並沒有保存上下文。 在下一次迭代中,再次查詢以獲取A1,但返回nil。 (所以很奇怪......)核心數據關係保存問題

如果我在第一個interation中保存上下文,那麼在下一次迭代中再次獲得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

請分享一些代碼。 – proxi

+0

剛剛更新,謝謝! – ffprintf

+0

你確定getManagedObj_ById是否正確實現?同時檢查你的關係是否被正確設置爲對多。除此之外,我看不到任何可疑的東西。 – proxi

回答

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"];