在IOS上使用AFNetworking流式传输JSON

aki*_*nen 6 iphone streaming json ios afnetworking

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

mat*_*ttt 12

AFNetworking没有内置的流式SAX风格的JSON操作,但它应该是直接创建自己的.

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

如果你能够使这个工作,我鼓励你发布并与他人分享.我认为这可能对很多人有用.

  • AFNetworking无法轻松实现这一点.首先,AFURLConnectionOperation的method -connection:didReceiveData:未正确实现.它仅适用于始终消耗连接提供的所有字节的流.这包括文件流和内存流.然而,为了将解析器的流API与NSURLConnectionDelegate"接口",需要更详细的方法,涉及某种"同步队列"作为传输数据的手段和具有固定大小缓冲器的配对流. (2认同)