JSON 数据相同但程序失败?
Posted
技术标签:
【中文标题】JSON 数据相同但程序失败?【英文标题】:JSON data identical yet program fails? 【发布时间】:2011-12-07 14:57:20 【问题描述】:我有一个 ios 应用程序,它从服务器获取一些 JSON(以 NSData 的形式)。我使用 SBJson 框架的解析器将其转换为 NSDictionary 对象,如下所示:
SBJsonParser *parser = [[SBJsonParser alloc] init];
NSDictionary *content = [parser objectWithData:data];
然后我继续从“内容”等中读取对象。
现在,这个确切的代码使用旧版本的 SBJson 框架完美运行。节目很好。然后我实现了一个新版本的 SBJson 框架,当我尝试用“内容”做同样的事情时,我的程序突然崩溃了(更具体地说,我得到一个 EXC_BAD_ACCESS 错误)。
我的第一个想法是新的 SBJsonParser 生成的文件略有不同,因此我将新旧“内容”都记录到文本文件中,并从命令行对它们运行“diff”命令。它们完全一样。
所以,我所做的唯一更改是使用新的 SBJsonParser。我错过了什么?
【问题讨论】:
如果您在升级后没有更改代码,您可能过度释放曾经泄漏的对象,或者可能是您使用的SBJsonParser
版本中的 API 更改或错误。无论哪种方式enable Zombies 并追踪它。
当我启用僵尸时它不会崩溃,但是当我禁用它们时它会崩溃。在 Zombie 的分析器(Instruments)中没有僵尸出现。
似乎是 SBJSON 框架中的一个错误,您可以尝试 JSONKit 或 > iOS 5 NSJSONSerialization 类中的替代方法
【参考方案1】:
解决方案是稍微更改我的代码:
SBJsonParser *parser = [[SBJsonParser alloc] init];
NSDictionary *content = [[parser objectWithData:data] retain];
【讨论】:
以上是关于JSON 数据相同但程序失败?的主要内容,如果未能解决你的问题,请参考以下文章
为啥移动设备上的浏览器可以播放比设备支持的分辨率更高的视频,但显示相同 Web 应用程序的原生应用程序可能会失败?
从服务器下载文件一直失败,但相同的 obj-c 代码在另一个环境和 IOS 应用程序中工作