我有一个Web服务器,它将JSON结果异步回流到iOS客户端。客户端使用NSURLConnection连接,我从方法中访问数据:
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData)
数据目前以1024字节块的形式返回。但是,我不知道如何判断消息完成时是否收到数据,而不是将我收到的所有数据附加到字符串中,并尝试每次都将其解析为JSON。这种方法似乎很容易出错 - 是否有更好的方法来处理这个问题?在发送完整响应时会在标题中标记的内容?
答案 0 :(得分:2)
你有两种方式
第一&更好的方法是实现connectionDidFinishLoading:
NSURLConnectionDataDelegate
委托,它将在连接成功加载时触发。
第二种方法是手动处理,如下所示。
您可以在Web服务器端执行以下操作,
Step1:在开始发送原始数据之前先发送以下信息。
a.Number of Chunks.[totalSize/1024] (mandatory).
b.TotalSize(not mandatory).
您可以在客户端方面执行以下操作,
第1步:存储上述信息。
第2步:编写以下代码
@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;
}
}
答案 1 :(得分:1)
在NSURLConnectionDataDelegate中,有一个方法connectionDidFinishLoading:
应在服务器完成发送时调用。您还可以在didReceiveResponse中检索预期长度,但这不可靠并且需要服务器端支持。