Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone connectionDidFinishLoading在connectionDidReceiveData接收到所有数据之前被调用?_Iphone_Nsurlconnection - Fatal编程技术网

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

Iphone connectionDidFinishLoading在connectionDidReceiveData接收到所有数据之前被调用?,iphone,nsurlconnection,Iphone,Nsurlconnection,我遇到一个问题,在ConnectionIDReceiveData接收并处理所有数据之前,ConnectionIDFinishLoading收到通知。这个问题之所以出现,是因为我试图在数据到达时对其进行处理,并更新tableview。我认为这种处理会减慢速度,因此,在我处理所有数据之前,会调用ConnectiondFinishLoading,因此我似乎总是错过最后10-15%的数据 根据apple文档,它声明在调用ConnectiondFinishLoading后,代理将不再接收任何调用。是否有可

我遇到一个问题,在ConnectionIDReceiveData接收并处理所有数据之前,ConnectionIDFinishLoading收到通知。这个问题之所以出现,是因为我试图在数据到达时对其进行处理,并更新tableview。我认为这种处理会减慢速度,因此,在我处理所有数据之前,会调用ConnectiondFinishLoading,因此我似乎总是错过最后10-15%的数据

根据apple文档,它声明在调用ConnectiondFinishLoading后,代理将不再接收任何调用。是否有可能因为处理一段数据花费了很长时间,然后调用了connectionDidFinishLoading,随后没有使用最终的数据段再次调用connectionDidReceiveData,所以connectionDidReceiveData没有发送所有数据

仅供参考,我尝试在自己的线程中运行数据处理方法,但这似乎没有帮助。顺便说一句,我已经在ConnectionIDFinishLoading中实现了相同的方法,效果很好,但是我正在尝试立即开始处理数据,而不是等待加载所有数据,这可能需要一段时间

这里是代码的概要,尽管我已经删除了处理代码,因为它有点长而且凌乱

-(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

不太可能出现连接类问题。你能发布你的代码吗?很难猜出是什么问题。是什么让您认为它丢失了数据?[response expectedContentLength]不等于最终转换的[NSString length]的长度。这和我也不同于原始文件和下载的文件,下载的文件缺少拥抱块虽然开始和结束是相同的????在didReceiveData中,看起来你忽略了第一块数据,然后在第二块数据进来后尝试完全处理数据。didReceiveData方法可以被多次调用,在拥有所有数据之前,您无法真正处理这些数据。ProcessSearchResultsforda数据是否崩溃?