【问题标题】:Streaming JSON with AFNetworking on IOS在 IOS 上使用 AFNetworking 流式传输 JSON
【发布时间】:2012-03-11 03:18:19
【问题描述】:

使用 AFNetworking 从流式 JSON API 接收数据的最优雅方式是什么? AFNetworking 为从 JSON API 接收非流式数据提供了出色的支持,但我找不到任何流式 JSON 的示例。

【问题讨论】:

  • 你有过这样的工作吗?
  • 据我所知,我设法实现了一个非常简单的 JSON 流示例,但不久之后,我对需要它的 IOS 项目(即 CampFire 客户端)的兴趣就下降了。不幸的是,什么都没有完成。 :)
  • 很公平。感谢您的更新!

标签: iphone ios json streaming afnetworking


【解决方案1】:

AFNetworking 没有内置的流式 SAX 样式 JSON 操作,但应该可以直接创建您自己的操作。

  • 创建AFJSONRequestOperation的子类
  • 在初始化期间使用操作的outputStream 属性将其连接到支持SAX 样式解析的JSON 解析器(例如Yajl)。解析器将读取数据并在 JSON 对象传入时构建它
  • 连接responseJSON 属性以从解析器读取缓存对象
  • ...或者根据您进行流式传输的方式,您可能需要添加一个新属性,该属性定义一个块以在新的 JSON 对象返回时执行(例如 setReceivedJSONBlock:((^)(void (id JSON))block)。这个块可能会被解析器发送的委托方法触发(例如<YAJLParserDelegate> -parserDidEndDictionary:)。

如果您能够完成这项工作,我会鼓励您发布并与他人分享。我认为这可能对很多人有用。

【讨论】:

  • 感谢您的回答,我会尝试建议的方法!
  • 这对于 AFNetworking 来说不会那么容易。首先, AFURLConnectionOperation 的方法 -connection:didReceiveData: 没有正确实现。它仅适用于总是消耗连接提供的所有字节的流。这包括文件流和内存流。但是,为了将解析器的流 API 与 NSURLConnectionDelegate “接口”,需要一种更详细的方法,其中涉及某种“同步队列”作为传输数据和具有固定大小缓冲区的配对流的手段。
  • 你能解释一下吗?如何将 outputStream 连接到 JSON 解析器?
猜你喜欢
  • 2014-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-09
  • 1970-01-01
  • 1970-01-01
  • 2021-07-29
  • 1970-01-01
相关资源
最近更新 更多