嘿我的tableView有问题。我通过NSURLSessionDataTask从服务器获取数据,当它完成后我重新加载表视图。但我只是在触摸显示屏后才看到数据。
这是代码。
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:url];
request.HTTPMethod = @"GET";
[request addValue:@"application/json" forHTTPHeaderField:@"Accept"];
NSURLSessionDataTask * dataTast = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error == nil) {
tableViewArray = [NSJSONSerialization JSONObjectWithData:data options:1 error:nil];
[self.tableView reloadData];
[self.tableView setNeedsDisplay];
}
}];
[dataTast resume];
我在Storyboard中设置了dataSource和委托。
这不可能吗?
答案 0 :(得分:6)
将[self.tableView reloadData];
放在主线程上。所有用户界面必须在主线程上更新。由于tableview
在调用[self.tableView reloadData];
时没有重新加载。但是当你scroll
时tableView
它获取更新的数据。在主线程上放置[self.tableView reloadData];
。
NSURLSessionDataTask * dataTast = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error == nil) {
tableViewArray = [NSJSONSerialization JSONObjectWithData:data options:1 error:nil];
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];
});
}
}];
也无需致电[self.tableView setNeedsDisplay];