1

我有一个将 JSON 结果异步传输回 iOS 客户端的 Web 服务器。客户端正在使用 NSURLConnection 进行连接,我从该方法访问数据:

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

数据当前以 1024 字节块的形式返回。但是,除了将收到的所有数据附加到字符串并尝试每次将其解析为 JSON 之外,我不确定如何判断消息是否完整何时收到数据。这种方法似乎很容易出错 - 有没有更好的方法来处理这个问题?发送完整响应时会在标头中标记的内容或其他内容?

4

2 回答 2

2

你有两种方法

第一个更好的方法是实现connectionDidFinishLoading: NSURLConnectionDataDelegate 委托,它将在连接成功完成加载时触发。

第二种方法是手动处理它,如下所示。

您可以在 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 回答