【发布时间】: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