2012-02-20 8 views
6

AFNetworkingを使用してストリーミングJSON APIからデータを受け取る最もエレガントな方法は何でしょうか? AFNetworkingは、JSON APIから非ストリーミングデータを受け取る優れたサポートを提供していますが、JSONストリーミングの例は見つかりませんでした。IOS上でAFNetworkingを使用したJSONのストリーミング

+0

このようなことができましたか? –

+0

私が覚えている限り、非常に単純なJSONストリーミングのサンプルを実装することができましたが、そのすぐ後に私が必要としたIOSプロジェクト(CampFireクライアント)に興味がなくなりました。残念ながらこれで終わったことはありません。 :) – akisaarinen

+0

十分な公正。更新していただきありがとうございます! –

答えて

12

AFNetworkingにはストリーミングSAXスタイルのJSON操作が組み込まれていませんが、自分で作成するには簡単です。

  • (例えばYajlなど)の解析SAXスタイルをサポートしているJSONパーサーにそれをフックするために、初期化時の動作のoutputStreamプロパティを使用しAFJSONRequestOperation
  • のサブクラスを作成します。パーサは、データを読み取り、パーサ
  • ...またはあなたはストリーミングをやっている方法に応じからキャッシュされたオブジェクトを読み取るためにresponseJSONプロパティをフックアップ、あなたが必要になることがあり、それは
  • に来るようJSONオブジェクトを構築します新しいJSONオブジェクトが戻ったときに実行するブロックを定義する新しいプロパティを追加します(例:setReceivedJSONBlock:((^)(void (id JSON))block)。このブロックは、おそらくパーサーから送信されたデリゲートメソッド(たとえば、<YAJLParserDelegate> -parserDidEndDictionary:)によってトリガーされます。

この機能を利用できる場合は、他の人と公開して共有することをおすすめします。私はこれがかなりの人にとって役に立つと思う。

+1

答えをありがとう、私は提案されたアプローチを試してみよう! – akisaarinen

+2

これはAFNetworkingで簡単には機能しません。まず、AFURLConnectionOperationのメソッド-connection:didReceiveData:が正しく実装されていません。これは、常に接続によって提供されるすべてのバイトを消費するストリームに対してのみ機能します。これには、ファイルストリームとメモリストリームが含まれます。しかし、パーサのストリームAPIをNSURLConnectionDelegateと「インタフェース」するためには、固定サイズのバッファを持つデータとペアのストリームを転送する手段として何らかの種類の「同期キュー」を必要とするより徹底したアプローチが必要です。 – CouchDeveloper

+0

これについてもう少し説明できますか? outputStreamをJSONパーサーにフックする方法は? –

関連する問題