【问题标题】:Core Data does a crash in iOS 5 onlyCore Data 仅在 iOS 5 中崩溃
【发布时间】:2013-08-07 16:10:48
【问题描述】:

我正在编写一个与服务器通信的应用程序。服务器使用 json,因此我将这个 json 放入我的应用程序中,并将结果序列化为 NSMutableDictionary,然后用于创建新实体。

这是代码:

if (context == nil) {
    context = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
}

UserTable *ut = [NSEntityDescription insertNewObjectForEntityForName:@"UserTable" inManagedObjectContext:context];
ut.user = [Diz objectForKey:@"user"];
ut.email = [Diz objectForKey:@"email"];
ut.phone = [Diz objectForKey:@"phone"];

NSError *error = nil;    
if (![context save:&error]) {
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);        
}

在 iOS 4.3、iOS 6.0 和 6.1 中都能完美运行。在 iOS 5.0.1 中,此代码会导致 exc_bad_Address 本地化为 [context save:&error] 或有时本地化为 ut.phone=[Diz objectForKey:@"phone"]

我只使用一个上下文(我用“isMainThread”函数测试线程组合),我能做什么?我的错误日志是空的,应用程序只是崩溃了。

编辑

感谢您的建议。我已经从设备中删除了我的应用程序,但我会尝试进行迁移。我启用了异常断点,但它是一样的......应用程序崩溃没有记录任何错误(我也启用了 NsZombie)。在崩溃期间,在实体“UserTable”的属性上设置了绿色断点,如果我从保存中删除此属性,则在保存函数中设置断点。

编辑

经过多次测试,我检测到此崩溃的标准行为。我的实体 UserTable 有 31 个属性,如果我删除一个属性都可以正常工作...我已经尝试使用另一个名称和其他属性的名称重新创建实体,但行为是相同的...这是什么意思?实体的属性数量有限制吗?还有其他建议吗?

【问题讨论】:

  • 您可以尝试在所有 Objective-C 崩溃时设置断点来帮助调试。
  • 你的意思是在你打电话给insertNewObjectForEntityForName的地方写“contesto”还是“context”?
  • 使用崩溃日志更新您的问题

标签: iphone ios core-data exc-bad-access


【解决方案1】:

如果没有更多细节,很难理解发生了什么。

在此期间很少有建议。

首先。提供一些关于你的核心数据模型的有用信息。也许,这只是一个假设,您已经更改了模型中的某些内容,现在您需要删除已安装的应用程序或执行迁移。

第二。启用例外以查看发生了什么您可以在此处关注此讨论"Run > Stop on Objective-C exception" in Xcode 4?

第三。使用驼峰命名法。 Diz 应该是 diz 或更明确的名称,例如 resultDictionary 或任何您想要的名称。

第四。你确定一个单一的上下文是正确的吗?当您要从服务器下载大量数据时,UI 可能会冻结。

最后,最好有一个错误日志。这是空的什么意思?

【讨论】:

  • 感谢您的建议。
猜你喜欢
  • 2012-05-02
  • 2016-12-12
  • 1970-01-01
  • 2016-10-27
  • 1970-01-01
  • 2012-01-17
  • 2011-12-25
  • 2010-11-16
  • 1970-01-01
相关资源
最近更新 更多