【问题标题】:Core data: Not saving relationships within launches核心数据:不在发布中保存关系
【发布时间】:2012-03-03 10:32:26
【问题描述】:

更新:
我发现了问题:在启动应用程序时,为了升级数据库,我下载了所有活动,删除了所有数据库并插入了活动。
所以参考丢失了。
谢谢!


我在保存我的关系时遇到了问题。它工作正常,但是当我停止模拟器并再次启动时,关系就消失了! 这是我的代码。

+ (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;
}

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

我得到了调用这个函数的“活动”。

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

在我创建“viaje”并添加关系“活动”后,它返回 8,但是当我停止模拟器并再次重新启动时,它返回 0。

感谢您的帮助!

【问题讨论】:

  • 似乎 [CoreDataHelper commitDefaultMOC] 不起作用。
  • 这个代码:NSManagedObjectContext *moc = ApplicationDelegate.managedObjectContext; NSError *error = nil; if (![moc save:&error]) { // 保存失败 NSLog(@"Core Data Save Error: %@, %@", error, [error userInfo]);返回否; } 返回是;
  • 很奇怪,保存后尝试输出[moc save]的错误。也许 [mac save] 是 TRUE,但错误不是 nil
  • @NeverBE:感谢您的回答,但是当我打印错误时显示“核心数据保存错误:(null),(null)”,因为没有错误。
  • ApplicationDelegate.managedObjectContext; 一定会返回一个对象吗?你能记录那个值吗?

标签: objective-c ios core-data


【解决方案1】:

您正在将[results count] 保存在viaje.numActividades 中。但是,在您的循环中,您只是将那些 JSON 结果添加到具有现有 ID 的 viaje。匹配的活动数量显然为零。

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

【讨论】:

  • 感谢您的回答,但是当我调用 getAllActivitiesFromViaje 时,它​​返回 8 活动,然后我停止模拟器,此调用返回 0 活动。
  • 你描述的方法都是手卷的。只需使用[viaje activities].count 以确保您获得正确的值。同样,带有 ID 的方案很可能有问题。
  • 嗨 Mundi,当我调用 getAllActivitiesFromViaje 时,我得到了一系列活动 (8),我可以使用它们(基本上列出信息)。然后我关闭模拟器,然后我得到了 0 个活动。
猜你喜欢
  • 1970-01-01
  • 2011-04-16
  • 1970-01-01
  • 1970-01-01
  • 2013-07-24
  • 1970-01-01
  • 1970-01-01
  • 2011-09-01
  • 1970-01-01
相关资源
最近更新 更多