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 会终止应用程序

取消 NSJSONSerialization - 键入时搜索,请求重叠

不同格式的 NSJSONSerialization 数据