我是第一个应用程序的新手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内部调用的。如果这就是原因,有人知道如何绕过它吗?
答案 0 :(得分:2)
您最有可能在非主线程上执行storeChanged
。
这样做,你会很高兴:
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];
});