Core data 一种奇怪的iPhone核心数据错误行为

Core data 一种奇怪的iPhone核心数据错误行为,core-data,save,Core Data,Save,我在一个核心数据应用程序中有一个非常奇怪的行为。 代码如下: unaReg.valore = [NSNumber numberWithInt:val]; NSError *error; if (![managedObjectContext save:&error]) { [myUtil manageError:[error localizedDescription]]; } unaReg是一个核心数

我在一个核心数据应用程序中有一个非常奇怪的行为。 代码如下:

        unaReg.valore = [NSNumber numberWithInt:val];
        NSError *error;
        if (![managedObjectContext save:&error]) {
            [myUtil manageError:[error localizedDescription]];
        }
unaReg
是一个核心数据实体,我想更新它的
valore
属性。 当我运行
save
命令(
managedObjectContext save:&error
)时,由于程序在
if
分支内流动,因此我收到一个错误。奇怪的行为是
error
变量是
nil
,新值被正确地保存在数据库中(因此似乎没有错误)。 怎么了????
谢谢。

再次检查托管对象上下文是否已设置:

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

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

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

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

正如gerry3所提到的,您可能有一个零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获得错误响应:并且因为您没有将error设置为nil,它将指向内存中的“某物”,从而进一步导致混淆。

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

正如gerry3所提到的,您可能有一个零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获得错误响应:并且由于您没有将error设置为nil,它将指向内存中的“某物”,从而进一步导致混淆。

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

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

我遇到过其他一些情况,但现在我想不起来了


希望有帮助

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

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

我遇到过其他一些情况,但现在我想不起来了


希望对您有所帮助

设置managedObjectContext,因为此代码是我查找正确的unaReg entitymanagedObjectContext的周期的一部分。设置managedObjectContext,因为此代码是我查找正确的unaReg entity的周期的一部分。由于此步骤只是实体树旅行的最后一步,我认为错误可能远不止于此。我有很多ViewController,它们将子实体发送到子ViewController,如下面的代码所示。myViewController*myVC=[[myViewController alloc]initWithNibName:@“myNib”bundle:nil];myVC.entity=[self entity];myVC.managedObjectContext=self.managedObjectContext;[self.navigationController pushViewController:myVC动画:是];[myVC发布];您认为上次发布会导致内存泄漏吗?感谢在该示例中,它不会导致内存泄漏。你是否按照我的建议加入了断言?是的,我加入了,但现在我得到了一个EXC\u BAD\u访问权限。我想我需要寻找坏的释放对象。。。这将不是一个简单的任务!断言不会导致错误访问。听起来你的问题比你意识到的要多!您是否通过静态分析器运行应用程序?如果没有,则需要清除所有警告和analyzer结果。都是。这个虫子让我头疼。现在我再次得到一个零错误指针,但数据正确地保存在数据库中。这是一个奇迹吗???因为这一步只是实体树旅行的最后一步,我认为错误可能远不止于此。我有很多ViewController,它们将子实体发送到子ViewController,如下面的代码所示。myViewController*myVC=[[myViewController alloc]initWithNibName:@“myNib”bundle:nil];myVC.entity=[self entity];myVC.managedObjectContext=self.managedObjectContext;[self.navigationController pushViewController:myVC动画:是];[myVC发布];您认为上次发布会导致内存泄漏吗?感谢在该示例中,它不会导致内存泄漏。你是否按照我的建议加入了断言?是的,我加入了,但现在我得到了一个EXC\u BAD\u访问权限。我想我需要寻找坏的释放对象。。。这将不是一个简单的任务!断言不会导致错误访问。听起来你的问题比你意识到的要多!您是否通过静态分析器运行应用程序?如果没有,则需要清除所有警告和analyzer结果。都是。这个虫子让我头疼。现在我再次得到一个零错误指针,但数据正确地保存在数据库中。这是一个奇迹吗????