在connectionDidReceiveData收到所有数据之前调用connectionDidFinishLoading?

时间:2011-02-17 23:46:35

标签: iphone nsurlconnection

我遇到的问题是在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

0 个答案:

没有答案