Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.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
Objective c 具有tableView的sendAsynchronousRequest在绘图时重新加载数据延迟_Objective C_Ios_Xcode_Ios5 - Fatal编程技术网

Objective c 具有tableView的sendAsynchronousRequest在绘图时重新加载数据延迟

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 *

我正在尝试使用iOS5中添加的新sendAsynchronousRequest。 我有一个模型类(文件)和一个方法,该方法从服务器请求一些数据,然后将这些数据传递给创建模型对象的控制器类(FileController)

模型类有一个包含下一个代码的方法:

[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]
操作,它会将其置于主线程上,这首先会破坏使用异步请求的目的。。。。?