NSJSONSerialization 崩溃的应用程序
Posted
技术标签:
【中文标题】NSJSONSerialization 崩溃的应用程序【英文标题】:NSJSONSerialization crashing app 【发布时间】:2013-04-30 17:23:01 【问题描述】:我有一本字典,当我登录时它会显示...
Date = "2013-04-30 17:17:18 +0000";
Description = Kb;
EventID = "92193e58-c04a-4233-9a6c-1332bc056b20";
Title = Keyboard;
我正在尝试将其转换为 NSData 用于像这样的 JSON Web 服务...
- (NSData *)JSONRepresentation
NSDictionary *dictionary = [self dictionaryObject];
NSError *jsonError;
NSData *JSONData = [NSJSONSerialization dataWithJSONObject:dictionary
options:0
error:&jsonError]; //This is where the error occurs.
return JSONData;
但每次我运行它时,应用程序都会崩溃。
字典格式正确,应用程序在此行崩溃。
在 AppCode 中我得到崩溃报告...
EXC_BREAKPOINT (code=EXC_ARM_BREAKPOINT, subcode=0xdefe))
在 Xcode 中,应用程序会停止,如果我尝试继续,它会因错误而停止...
EXC_BAD_ACCESS (code=1, address=0x0)
【问题讨论】:
调试器在哪里显示它爆炸了? 您能否提供更多上下文,例如周围的线条?jsonError
声明在哪里?
在线NSData *JSONData = [NSJSON....
。它停在那条线上。在崩溃后的调试器中,我打印出字典,所以字典肯定是正确的。
添加了整个功能。
NSDate 会破坏它。其他值应该没问题。这是来自文档的列表:All objects are instances of NSString, NSNumber, NSArray, NSDictionary, or NSNull.
【参考方案1】:
您的密钥是用于转换为 JSON 的无效对象。 From the docs:
可以转换为 JSON 的对象必须具有以下内容 属性:
***对象是 NSArray 或 NSDictionary。所有对象都是 NSString、NSNumber、NSArray、NSDictionary 或 NSNull 的实例。全部 字典键是 NSString 的实例。数字不是 NaN 或 无穷大。
【讨论】:
非常感谢。 NSDate 对象导致了崩溃。 太棒了。我有一个快速枚举,但我忘记将它作为字符串 rawValue 传递,这导致了我的崩溃。【参考方案2】:检查前,如果字典无效,则返回。:
if (![NSJSONSerialization isValidJSONObject:dictionary]) return;
【讨论】:
以上是关于NSJSONSerialization 崩溃的应用程序的主要内容,如果未能解决你的问题,请参考以下文章
从特定 url 提取数据时 NSJSONSerialization 崩溃
对象是 NSMutableDictionary 的子类,但在 mutate 方法(NSJSONSerialization)上崩溃
NSJSONSerialization 是不是比 JSONKit 更容错、更健壮?
如果没有互联网连接,NSJSONSerialization 会终止应用程序