1

JSON の結果を iOS クライアントに非同期でストリーミングしている Web サーバーがあります。クライアントは NSURLConnection を使用して接続しており、メソッドからデータにアクセスします。

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData)

現在、データは 1024 バイトのチャンクで返されています。ただし、受信したすべてのデータを文字列に追加して毎回 JSON に解析しようとする以外に、データを受信したときにメッセージが完了したかどうかを判断する方法がわかりません。この方法は非常にエラーが発生しやすいようです。これを処理するためのより良い方法はありますか? 完全な応答が送信されたときにヘッダーまたは何かでマークするものはありますか?

4

2 に答える 2

2

あなたには2つの方法があります

最初のより良い方法はconnectionDidFinishLoading: NSURLConnectionDataDelegate 、接続の読み込みが正常に終了したときにトリガーされるデリゲートを実装することです。

2番目の方法は、次のように手動で処理することです。

Web サーバー側では次のことができます。

Step1: 元データの送信を開始する前に、まず以下の情報を送信します。

      a.Number of Chunks.[totalSize/1024] (mandatory).
      b.TotalSize(not mandatory).

クライアント側では次のことができます。

Step1:上記の情報を保存します。

Step2: 以下のコードを書く

@property (nonatomic,assign) int chunkNumber;

@property (nonatomic,strong) NSData *receivedData;

Self.chunkNumber = 1;

    -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData)myata{

       if(self.chunkNumber != Number of Chunks)
       {
          if(!self.receivedData)
          {
            //allocate and initialize self.receivedData
          }

          [self.receivedData appendData:myData];    

       }
       else
       {

         //completed . do whatever with self.receivedData.
         //if you want to validate, just check the self.receivedData size with TotalSize

        self.chunkNumber = 1;

       }

    }
于 2013-03-27T19:02:10.580 に答える
1

NSURLConnectionDataDelegate にはconnectionDidFinishLoading:、サーバーが送信を完了したときに呼び出す必要があるメソッドがあります。didReceiveResponse で予想される長さを取得することもできますが、これは信頼性が低く、サーバー側のサポートが必要です。

于 2013-03-27T18:58:25.783 に答える