2012-03-03 60 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