【问题标题】:Objective-C: How to read JSON?Objective-C:如何读取 JSON?
【发布时间】:2011-11-29 18:36:33
【问题描述】:

我发现这篇关于从 iOS 中的 URL 请求解析 JSON 响应的文章:http://www.raywenderlich.com/2965/how-to-write-an-ios-app-that-uses-a-web-service

本文使用 JSON 框架。我已经从网页上下载了最新的“SBJson_v3.0.4.zip”并拖入了我项目中的一个新组。但随后构建返回 62 个错误,例如:

  • ARC 禁止发送“释放”的显式消息
  • unsafe_unretained 属性 'delegate' 的现有 ivar 'delegate' 必须是 __unsafe_unretained
  • 'retain' 不可用:在自动引用计数模式下不可用

有人知道为什么吗? JSON 框架是否与最新的 Xcode 不兼容?

【问题讨论】:

标签: objective-c ios json


【解决方案1】:

从 iOS 5 开始,iOS 有了自己的 JSON 解析器(感谢 Twitter!)

NSError *err = nil;
id result = [NSJSONSerialization JSONObjectWithData:data options:0 error:&err];

一定要检查输出的类型——它可以是任何东西,从字符串到数字到字典再到数组。

【讨论】:

  • 我对这两个答案都投了赞成票,但为了记录,我更喜欢这个答案,因为如果不需要,为什么要使用外部框架?
  • JSONObjectWithData 返回空值。为什么它可以返回null?有什么想法吗?
  • 我发现了问题。我的 JSON 无效。抱歉,我是 iOS 新手。与 Android 相比,调试有点困难。
【解决方案2】:

您需要为包中提供的那些特定文件禁用自动引用计数。如果您转到项目设置 -> 您的目标 -> 构建阶段选项卡并展开编译源箭头,您将看到所有项目文件。

在属于 SBJSON 的那些下,您需要添加 -fno-objc-arc 编译器标志(找到文件,双击表格的右侧,它会弹出一个框,您可以在其中添加编译器标志)

SBJSON 与最新的 SDK 兼容,但与最新 SDK 中启用的自动引用计数不兼容,这就是您收到这些错误的原因。

【讨论】:

  • 哇,我真的很想知道,你如何命名你的文件......
  • 呵呵我从我正在处理的(秘密)个人项目中截取了屏幕截图,文件首先使用应用程序名称命名,以避免类冲突。除此之外没有其他原因:)
【解决方案3】:

最新的 SBJSON 支持 ARC。

https://github.com/stig/json-framework

【讨论】:

    【解决方案4】:

    在您的项目设置中,转到构建阶段并单击编译源代码,您会得到一堆 .m 文件,它们只是您的项目文件。 单击需要禁用 ARC 的相应文件的编译器标志列,然后输入 -fno-objc-arc 。 此外,如果您的项目不支持 ARC,但您需要在几个文件中启用 ARC,您可以按照相同的步骤进行操作,但这次输入 -fobjc-arc

    现在您可以使用任何 json 套件。无需担心格式。 但我强烈建议尝试苹果内置的 NSJSonSerialization 方法,如果对苹果不满意,请使用第三方 json 工具包。

    在 github 上有大量可用的它们以及它们的文档。我目前在我的项目中使用的是 johnezang-jsonkit

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-04
      • 2014-05-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多