2015-10-19 125 views
1

我是一个新手iOS程序员,在我的第一个应用程序工作,我遇到了一个小问题。我想在网上下载一些数据后更新我的tableView,并有其控制器中下面的代码这样做:reloadData不刷新屏幕

-(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),显示在导航控制器中,两者都在故事板内。据我所知,所有的网点都已经设定好了,但是如果你有一个关于如何排除故障的方法,请告诉我。

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

+2

你确定这是从主线程调用? –

+1

没有足够的信息。数据如何下载?什么时候调用storeChanged?你的numberOfRowsForSection表视图方法是什么样的? (显示代码)也显示你的numberOfSectionsInTableView方法。 –

+1

可以在节中显示您的numberOfRows方法 –

回答

2

您很可能在非主线程上执行了storeChanged

做到这一点,你会很高兴:

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

您明白了,谢谢。 – Cesar