2012-03-03 38 views
0

UPDATE:
我發現這個問題:在啓動應用程序,升級DB,我下載了所有的活動,刪除了所有數據庫,並插入活動。
所以參考文獻丟失了。
謝謝!核心數據:啓動內不保存關係


保存我的關係時出現問題。它工作正常,但是當我停止模擬器並再次啓動時,關係消失了! 這是我的代碼。

+ (BOOL) createViajeWithJson:(NSString *)responseJson dictParams:(NSDictionary *)dictParams{ 

    MOViaje *viaje = (MOViaje *)[NSEntityDescription insertNewObjectForEntityForName:@"Viaje" inManagedObjectContext:ApplicationDelegate.managedObjectContext]; 
    viaje.nombre = [dictParams valueForKey:@"nombreViaje"]; 
    viaje.destino = [dictParams valueForKey:@"destino"]; 
    viaje.timestamp = [NSDate date]; 


    NSArray *results = [responseJson JSONValue]; 

    for (id object in results){ 
     // get the entity previously saved. 
     MOActivity *tmpActivity = [MOActivity getActivityById:(NSNumber *)object]; 
     if (tmpActivity != nil) { 
      [viaje addActivitiesViajeObject:tmpActivity]; 
      [tmpActivity addViajeObject:viaje]; 
     } 
    }  

    viaje.numActividades = [NSNumber numberWithInt:[results count]];  

    NSManagedObjectContext *moc = ApplicationDelegate.managedObjectContext; 
    NSError *error = nil; 
    if (![moc save:&error]) { 
     // Save failed 
     NSLog(@"Core Data Save Error: %@, %@", error, [error userInfo]); 
     return NO; 
    } 
    return YES; 
} 

///////////////////

我得到了 'actvities' 調用這個函數。

+ (NSArray *) getAllActivitiesFromViaje:(MOViaje *) viaje { 
    NSArray *temp = [viaje.activitiesViaje allObjects] ; 
    return temp; 
} 

後,我創造「VIAJE」,並添加關係「活動」返回8,但是當我停止模擬器,並再次重新啓動,則返回0。

感謝您的幫助!

+0

似乎[CoreDataHelper commitDefaultMOC]不起作用。 – NeverBe 2012-03-03 11:00:18

+0

它代碼如下:NSManagedObjectContext * moc = ApplicationDelegate.managedObjectContext; \t NSError * error = nil; \t如果(![MOC保存:&錯誤]){ \t \t //保存失敗 \t \t的NSLog(@ 「核心數據保存錯誤:%@%@」,錯誤,[錯誤USERINFO]); \t \t return NO; \t} \t return YES; – user380257 2012-03-03 11:02:56

+0

很奇怪,試着在保存後輸出[moc save]的錯誤。可能[mac save]是TRUE,但錯誤不是零 – NeverBe 2012-03-03 12:09:18

回答

0

您在viaje.numActividades中保存[results count]。然而,在你的循環中,你只是將這些JSON結果添加到viaje,它們有一個現有的ID。匹配的活動數量顯然爲零。

檢查ID是否具有您期望的值,並檢查您的getActivityById方法是否正常工作。

+0

感謝您的回答,但是當我打電話給getAllActivitiesFromViaje時,它返回** 8 **活動,然後我停止模擬器,並且此調用返回** 0 **活動。 – user380257 2012-03-03 13:45:28

+0

你描述的方法都是手動滾動的。只需使用'[viaje activities] .count'確保您獲得正確的價值。同樣,帶ID的方案很可能是錯誤的。 – Mundi 2012-03-03 16:45:03

+0

嗨Mundi,當我打電話給getAllActivitiesFromViaje時,我得到了一系列的活動(8),我可以使用它們(基本上是列表信息)。然後我關閉模擬器,然後我有0個活動。 – user380257 2012-03-03 18:26:57