Objective c 具有tableView的sendAsynchronousRequest在绘图时重新加载数据延迟
我正在尝试使用iOS5中添加的新sendAsynchronousRequest。 我有一个模型类(文件)和一个方法,该方法从服务器请求一些数据,然后将这些数据传递给创建模型对象的控制器类(FileController) 模型类有一个包含下一个代码的方法:Objective c 具有tableView的sendAsynchronousRequest在绘图时重新加载数据延迟,objective-c,ios,xcode,ios5,Objective C,Ios,Xcode,Ios5,我正在尝试使用iOS5中添加的新sendAsynchronousRequest。 我有一个模型类(文件)和一个方法,该方法从服务器请求一些数据,然后将这些数据传递给创建模型对象的控制器类(FileController) 模型类有一个包含下一个代码的方法: [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *
[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
NSArray *decodedResponse = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSArray *files = [self _dictionariesToFiles:decodedResponse];
handler(files);
}];
控制器类使用它的方式如下:
[File findAll:conditions completionHandler:^(NSArray *files) {
dataSource = files;
NSLog(@"set");
[self.tableView reloadData];
NSLog(@"reload");
activityIndicator.hidden = TRUE;
}];
在控制台中,我可以立即查看NSLogs如何显示“设置”和“重新加载”消息,但表格和指示器直到几秒钟(5-10秒)后才会改变
有人知道问题出在哪里
谢谢
PD:我用一个兼容的同步请求更改了异步请求,然后问题消失了,但我想用一个异步请求来解决这个问题
这是兼容的同步代码:
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSArray *decodedResponse = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableContainers error:nil];
NSArray *files = [self _dictionariesToFiles:decodedResponse];
handler(files);
您需要在主线程上执行
[tableView reloadData]
。所有UI操作都必须在主线程上完成。有多种方法可以做到这一点。一是:
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];
activityIndicator.hidden = TRUE;
});
编辑:将activityIndicator添加到示例中我在使用时确实遇到了一些问题:
[[NSOperationQueue alloc]init]
但是使用[NSOperationQueue mainQueue]
一切都很完美。使用新队列时,执行行不遵循自然顺序,这是因为mainQueue在主线程上运行,所有UI工作都必须在主线程上进行。@Rscorreia greenisus是正确的,在我发现此问题之前,我与您有相同的问题。@greenisus那么,如何快速处理异步请求呢?如果执行[NSOperationQueue mainQueue]
操作,它会将其置于主线程上,这首先会破坏使用异步请求的目的。。。。?