我创建了一个类,用于在我的 iOS 应用程序中获取服务器端数据,基于 NSURLConnection,将获取的数据转发给委托进行处理。
下载 text/json 时,这非常有效。
我现在正在扩展以获取一些 png 图像,但无法获取数据。
我发现它在 didReceiveData 调用中中断,其中 [receivedData appendData:data] 对接收到的图像数据没有做任何事情。
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
// Append the new data to receivedData.
[receivedData appendData:data];
}
我将数据放入此方法(NSData >0 字节),但调用 [receivedData appendData:data] 不会更改 receivedData 的大小(仍为 0 字节)。
由于这适用于文本而不是图像数据,我相信它与字符集或编码有关,但在这方面找不到任何东西。
任何帮助表示赞赏。
使用请求的代码示例更新:
在进行调用的方法中:
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
if (theConnection) {
// Create the NSMutableData to hold the received data.
receivedData = [NSMutableData data];
// Also tried with no change in behaviour
// receivedData = [[NSMutableData alloc] initWithLength:0];
} else {
// Inform the user that the connection failed.
}
我的didReceiveResponse
:
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
[receivedData setLength:0];
}
另一个更新
结果发现问题归结为并发性,因为我同时触发了该类的三个实例以异步获取三个文件。问题是第一个版本receivedData
在完成破坏其他两个实例的响应时发布。
我如何确保类的每个实例都有自己的receivedData
可玩性?
最后的注意事项 使用 MutableArrays 的字典来检索数据可以解决并发问题。
似乎将 MutableArray 定义为类的私有属性也会为每个实例创建一个数组。
@interface MyClass(){
@private NSMutableData * receivedData;
}