reloadData没有刷新屏幕

时间:2015-10-19 19:28:17

标签: ios objective-c uitableview

我是第一个应用程序的新手iOS程序员,我遇到了一个小问题。我想在通过网络下载一些数据后更新我的tableView,并在其控制器中包含以下代码:

-(void)storeChanged:(EventsStore *)store
{
    NSLog(@"Store changed!");
    NSLog(@"tableview is %@", self.tableView);

    self.openSectionIndex = NSNotFound;

    NSLog(@"event count: %i", [[[EventsStore sharedStore] allEvents] count]);

    [self.tableView reloadData];   
}

(注意:商店是单身,因此不需要参数)

当它运行时,我得到以下输出:

2015-10-19 15:12:42.487 Appname[3366:69443] Store changed!
2015-10-19 15:12:42.487 Appname[3366:69443] tableview is <UITableView: 0xc00e000; frame = (0 0; 320 480); clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0xb114d30>; layer = <CALayer: 0xb112f30>; contentOffset: {0, -64}; contentSize: {320, 0}>
2015-10-19 15:12:42.487 Appname[3366:69443] event count: 12

但是在我尝试滚动之前,tableView仍然是空的,此时它会正确显示所有内容。

tableViewController是一个自定义类(扩展UITableViewController),显示在navigationController中,两者都在故事板内。据我所知,所有的插座已经设置好了,但如果您知道如何对故障插座进行故障排除,请告诉我。

编辑:我只是想知道原因是什么:这个函数是从completionBlock内部调用的。如果这就是原因,有人知道如何绕过它吗?

1 个答案:

答案 0 :(得分:2)

您最有可能在非主线程上执行storeChanged

这样做,你会很高兴:

dispatch_async(dispatch_get_main_queue(), ^{
    [self.tableView reloadData];
});