NSJSONSerialization 崩溃应用程序

7

我有一个字典,当我记录它时显示...

{
    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)

调试器在哪里显示它出错了? - Hot Licks
3
可以提供更多上下文吗?例如周围的代码行?jsonError 是在哪里声明的? - Jim
在这一行 NSData *JSONData = [NSJSON....。程序就停在了那里。在崩溃后的调试器中,我打印出了字典,所以字典肯定是正确的。 - Fogmeister
添加了整个函数。 - Fogmeister
4
NSDate会导致错误,其他数值应该没有问题。这是文档中提供的列表:所有对象都是NSString、NSNumber、NSArray、NSDictionary或NSNull的实例。 - sosborn
显示剩余8条评论
2个回答

15
您的密钥是无效对象,不能转换为JSON。来自文档的解释:

可转换为JSON的对象必须具有以下属性:

顶级对象是NSArray或NSDictionary。所有对象都是NSString、NSNumber、NSArray、NSDictionary或NSNull的实例。所有字典键都是NSString的实例。数字不是NaN或无穷大。


1
非常感谢。NSDate对象导致了崩溃。 - Fogmeister
太好了。我有一个 Swift 枚举类型,我忘记将它作为字符串原始值传递,这导致了我的程序崩溃。 - Undrea

1

在转换之前先检查字典是否无效,如果无效则返回。

if (![NSJSONSerialization isValidJSONObject:dictionary]) { return; }


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接