并发线程上的警报

时间:2014-02-12 11:23:35

标签: ios objective-c multithreading

在我的应用程序中,我通过按下按钮异步调用方法。屏幕将切换到不同的视图控制器,这是一个表格视图。

NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
NSURLSession *session = [NSURLSession sharedSession];

NSURLSessionDownloadTask  *task = [session downloadTaskWithRequest:request 
        completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error)
        {
            NSData *data = [[NSData alloc] initWithContentsOfURL:location];
            NSArray *array = [NSJSONSerialization JSONObjectWithData:data 
                                                             options:0 
                                                               error:&error];
            self.yearBucket = [NSMutableArray array];
            for (NSDictionary * dict in array) {
                Year *year = [[Year alloc ]init];
                year.yearName =[dict objectForKey:@"Year"];
                year.speeches = [dict objectForKey:@"Speeches"];
                [self.yearBucket addObject:year];
            }
            dispatch_async(dispatch_get_main_queue(), ^{
                [self.tableView reloadData];
            });
        }
    ...    

问题是UI移动到空白表视图中,因为数据需要一些时间来加载。如何在下一个动态显示数据加载的屏幕上显示和提醒视图,一旦视图刷新回主线程,就可以将其解除。

1 个答案:

答案 0 :(得分:0)

我建议您在加载数据时在视图上显示MVProgressHUD,然后执行[tableview reloadData]以更新表格中显示的数据。

您可能还应该显示网络活动指示器。当网络连接正在发生时,这只是一种很好的做法。我认为,如果您的应用依赖互联网连接,那么在允许用户开始请求之前,您正在检查连接?