我遇到的问题是在connectionDidReceiveData收到并处理了所有数据之前通知了connectionDidFinishLoading。问题是因为我试图在数据到达时处理数据并更新tableview。我认为这个处理速度正在减慢,因此在我处理完所有数据连接之前调用了DidFinishLoading,我似乎总是错过了最后10-15%的数据。
根据apple文档,它声明在调用connectionDidFinishLoading后代理将不再接收任何调用。是否有可能connectDidReceiveData没有被发送所有数据,因为它需要花费很长时间处理一段数据,然后调用connectionDidFinishLoading,然后不再使用最终的数据块调用connectionDidReceiveData?
我试过在自己的线程中运行数据处理方法,但这似乎没什么帮助。顺便说一下,我已经在connectionDidFinishLoading中实现了相同的方法,但是我正在尝试立即开始处理数据,而不是等待加载所有数据,这可能需要一段时间。
这是代码的大纲,虽然我删除了处理代码,因为它有点长而且很乱。
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)newData {
if (!self.data) {
self.data = [[[NSMutableData alloc] init] autorelease];
NSLog(@"data is null");
}
else {
[self.data appendData:newData];
[self processSearchResultsForData:self.data];
}
以下是处理数据的方法
-(void)processSearchResultsForData:(NSMutableData*)newData
{
NSString *newHtmlText = [[NSString alloc] initWithBytes:newData.bytes length:newData.length encoding:NSISOLatin1StringEncoding];
// process new data and create an array newResults with results
// only update results array with new data if results were found
if ([newResults count] > 0) {
self.resultsArray = newResults;
[self updateTableWithResults];
}
}
此方法更新tableView
-(void)updateTableWithResults
{
// do a lot more processing here
// then set results array as table data source
[self.tableView reloadData];
}
THX