下午好,
我使用一个TableViewController从我的数据库中显示一些“条目”,我试图使用[self.tableView reloadData];来在加载内容时重新加载该表,但是它不能工作,因为只有当我向上或向下触摸屏幕时,内容才会显示出来,如果我不使用触摸就不能显示任何内容。
我想我把self.tableView reloadData;放在了正确的位置,因为由于某种原因,直到我用手指移动屏幕时才会显示出来。
为什么会发生这种情况,我能做什么来自动重新加载我的表视图?
CarTableViewController.m:
- (void)viewDidLoad
{
[super viewDidLoad];
[self fetchJson];
},这是我的fetchJson:
-(void)fetchJson {
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
NSString * urlString = [NSString stringWithFormat:@"http://website.com/service.php"];
NSURL * url = [NSURL URLWithString:urlString];
NSData * data = [NSData dataWithContentsOfURL:url];
self.carModels = [[NSMutableArray alloc] init];
self.carMakes = [[NSMutableArray alloc] init];
self.carImages = [[NSMutableArray alloc] init];
self.likes = [[NSMutableArray alloc] init];
self.comments = [[NSMutableArray alloc] init];
@try
{
NSError *error;
[_jsonArray removeAllObjects];
_jsonArray = [NSJSONSerialization
JSONObjectWithData:data
options:NSJSONReadingMutableContainers|NSJSONReadingMutableLeaves
error:&error];
for(int i=0;i<_jsonArray.count;i++)
{
NSDictionary * jsonObject = [_jsonArray objectAtIndex:i];
NSString* imagen = [jsonObject objectForKey:@"imagen"];
[_carImages addObject:imagen];
NSDictionary * jsonObject2 = [_jsonArray objectAtIndex:i];
NSString* user = [jsonObject2 objectForKey:@"user"];
[_carMakes addObject:user];
NSDictionary * jsonObject3 = [_jsonArray objectAtIndex:i];
NSString* date = [jsonObject3 objectForKey:@"date"];
[_carModels addObject:date];
}
}
@catch (NSException * e)
{
NSLog(@"Exception: %@", e);
}
@finally
{
[self.tableView reloadData];
}
}
);
}提前谢谢。
发布于 2014-11-12 12:46:56
当我开始开发iOS应用程序时,我也经常遇到这个问题。
问题是,您没有在主线程上运行reloadData,后者负责UI。实际上,如果您运行此方法(而不是在主线程中),您的tableView的数据实际上会重新加载,但不会显示给用户。因此,如果您开始滚动tableView,主线程将“绘制”您的用户界面,从而显示数据。因此,您必须在主线程上运行reloadData。
所以拿出
[self.tableView reloadData];并在成功地从数据库中获取数据(值存储在字典/数组中)之后添加以下代码行:
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];
});我想你甚至可以把这段代码放进你的@finally块中。主main_queue包含在主线程上运行的任务。
https://stackoverflow.com/questions/26886452
复制相似问题