【问题标题】:managedObjectContext save fails with error being nullmanagedObjectContext 保存失败,错误为 null
【发布时间】:2010-11-09 19:11:51
【问题描述】:

什么会导致错误返回null,这就是我所拥有的

    + (BOOL)saveContext:(NSManagedObjectContext *)context
    {
      NSError *error = nil;
      if (![context save:&error]) 
      {
        DLog(@"ERROR %@, %@", error, [error userInfo]);
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Sorry"

                                                        message:@"Error Saving the Data" 
                                                       delegate:nil 
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];

        [alert show];
        [alert release];

        return NO;
      }
    return YES;
    }

上面的方法是类方法,不知道为什么报错没有任何信息。

这个方法是这样调用的

[HSCoreDataUtility saveContext:self.managedObjectContext];

当 modalViewController 关闭并返回到 NavigationController 时,我需要保存上下文,但它通过了一个错误,现在我想我知道它没有被保存的原因,但不应该错误给我一个线索?但日志只是说“错误(空),(空)”

任何想法

【问题讨论】:

  • 你确定context 不是零吗?

标签: iphone core-data ios nsmanagedobjectcontext


【解决方案1】:

我经历了你的痛苦,最终活了下来。 ;)

经过长时间的调试,我意识到在自定义对象验证方法中,在某些情况下我返回 NO 并且没有初始化错误。

如果您遇到此问题,请检查验证对象方法。 这可能也是你的问题。

【讨论】:

  • 这可能不是原始发布者的问题,但这正是发生在我身上的事情。谢谢!似乎核心数据应该抛出一个异常而不是与 NSManagedObjectContext 文档相矛盾——我应该提交一个错误。
  • 这值得 10 up 票。这为我节省了几个小时的头发拉扯时间,我敢肯定!同意,这可能不是最初的问题,但肯定会出现完全相同的症状。
  • 天哪!我会花几个小时来解决这个问题。谢谢!
  • 谢谢!还要花几个小时……直到找到你的提示。
【解决方案2】:

我能看到这种情况发生的唯一方法是,如果您传入 nil 上下文。我会在该类方法的顶部放置一个逻辑炸弹来防止这种情况发生。

好吧,实际上,我不会为这么少的代码创建类方法;但问题仍然存在。检查 nil 上下文。

【讨论】:

  • 上下文不为零,我肯定知道
  • 我是如何传递上下文的,它从应用程序委托开始,我从那里传递它,这可能与它有什么关系。
  • 它可能会在某个地方发布,或者没有保留?让它通过nil 检查吐出当前的[context retainCount]。检查永远不会有坏处。
  • 永远不要使用retainCount。对方法顶部的 nil 进行 NSAssert 检查。
  • 上下文为零正是我的问题,感谢您的提示!
【解决方案3】:

这是一个非常古老的线程,但希望我的回复可以帮助像我一样在 Google 上找到此内容的人。我遇到了同样的问题,这些答案都不是我的问题;事实证明,当我更改数据模型时,我犯了一个非常愚蠢的错误,即不删除/重新安装应用程序,因此保存失败而没有错误。检查以确保您没有做同样的事情! :)

【讨论】:

    【解决方案4】:

    嗯,我不确定 %@ 是否会导致错误变得冗长。 [error localizedDescription]?

    【讨论】:

    • 我都用过,[error userInfo] 和 [errorlocalizedDescription],同样的东西错误(null),(null)
    【解决方案5】:

    我碰巧遇到这个问题,经过长时间调试发现是因为重复声明了 NSError* 错误,可能你在外部范围内还有另一个 NSError* 错误,比如:

    NSError* error = nil;
    
    // some code
    
    if (!error)
    {
        NSError* error = nil;
    
        // your code
    }
    

    那么错误将为零,尽管实际上有一个异常。

    【讨论】:

      猜你喜欢
      • 2016-12-14
      • 2011-07-09
      • 2013-12-03
      • 1970-01-01
      • 1970-01-01
      • 2016-03-27
      • 2017-04-28
      • 1970-01-01
      • 2015-10-15
      相关资源
      最近更新 更多