在我的应用程序(使用故事板FYI)中,我有一个包含tableView的viewController。我的viewController命中一个API并返回我的tableView应该填充的项目数组。问题是,在成功检索数组后,reloadData方法不会触发对cellForRowAtIndexPath的调用。我已正确设置委托和数据源,但仍然没有运气。这是我的代码:
在我的viewDidLoad中:
- (void)viewDidLoad {
[super viewDidLoad];
self.tableView = [[UITableView alloc]init];
self.tableView.dataSource = self;
self.tableView.delegate = self;
[[CCHTTPClient sharedClient] getItemsWithSuccess:^(NSArray *items) {
self.items = items;
[self.tableView reloadData];
} failure:^(NSError *error) {
}];
}
以及我的numberOfRowsInSection:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [self.items count];
}
我还发现,如果我在前一个VC上进行API调用并在推送viewController之前设置viewController项的数组,则该表将正确填充。真的不确定这里发生了什么。任何帮助将不胜感激!
答案 0 :(得分:1)
我怀疑这是由于从辅助线程调用reloadData
引起的。试试这个:
[[AGHTTPClient sharedClient] getItemsWithSuccess:^(NSArray *items) {
self.items = items;
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];
});
} failure:nil];
答案 1 :(得分:1)
self.tableView应该是一个插座。你在viewDidLoad中用alloc init创建了一个不同的表视图,所以你在那个上调用reloadData,而不是你在屏幕上调用的那个。删除该alloc init行,并连接IB中的插座。