一个奇怪的iPhone CORE DATA错误行为

时间:2010-02-14 18:29:01

标签: core-data save

我在Core Data应用程序中有一个非常奇怪的行为。 这是代码:

        unaReg.valore = [NSNumber numberWithInt:val];
        NSError *error;
        if (![managedObjectContext save:&error]) {
            [myUtil manageError:[error localizedDescription]];
        }

unaReg是核心数据实体,我想更新其valore属性。 当我运行save命令(managedObjectContext save:&error)时,由于程序在if分支内部流动,我收到错误。奇怪的行为是error变量是nil并且新值在数据库中正确保存(因此似乎没有错误)。 怎么了???? 感谢。

3 个答案:

答案 0 :(得分:4)

您需要将NSError *error = nil;设置为安全,否则您将分配未确定的内存位置。

与提到的gerry3一样,你可能有一个nil managedObjectContext。我建议将代码更改为:

unaReg.valore = [NSNumber numberWithInt:val];
NSError *error = nil;
NSAssert(managedObjectContext != nil, @"Context is nil");
if (![managedObjectContext save:&error]) {
    [myUtil manageError:[error localizedDescription]];
}

这是NSAssert语句的完美用法,因为您可以在开发时使用它们进行内联测试,并使用一个开关,将它们全部关闭以进行生产。

如果您的managedObjectContext为nil,那么您将从-save获得错误响应:并且因为您没有将错误设置为nil,它将指向内存中的“某事”,进一步导致混淆。

答案 1 :(得分:1)

仔细检查您的托管对象上下文是否已设置:

    unaReg.valore = [NSNumber numberWithInt:val];
    NSError *error;
    NSLog(@"moc = %@",managedObjectContext);
    if (![managedObjectContext save:&error]) {
        [myUtil manageError:[error localizedDescription]];
    }

答案 2 :(得分:0)

如果managedObjectContext不为null,则您可能还需要检查存储在managedObjectContext中的其他托管对象。有时,当您只需要保存unaReg对象时,错误可能位于删除某些其他对象中。

我通常做的是:
- 检查Delete rule上的数据模型,确保已正确配置所有数据模型 - 在managedObjectContext的保存操作上,确保由于Delete rule而以某种方式删除了其他对象。

我遇到的其他一些情况,但现在我想不到。

希望有所帮助