我一直这样做,但由于某种原因,它今天不适合我。
单元格为空,这是我的代码:
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return [self.messageArray count];
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
// Configure the cell..
NSString *messageAtIndexPath = [messageArray objectAtIndex :[indexPath row]];
[[cell textLabel] setText:messageAtIndexPath];
return cell;
}
我确保所有内容(代理和来源)都已正确连接。
如果我硬编码,例如:
return 5;
和
[[cell textLabel] setText:@"this is a cell"];
然后它的工作,所以我不确定是什么。我的数组也已填充,我可以在日志控制台中看到它。
编辑:
dispatch_async(queue, ^{
NSString *postString = @"controller=Push&action=GetPushAlerts&accountId=123";
NSData *JsonData = [ApiCaller post :postString];
NSDictionary *result = [NSJSONSerialization JSONObjectWithData:JsonData options:NSJSONReadingMutableContainers error:nil];
//parsing JSON
dispatch_async(dispatch_get_main_queue(), ^{
BOOL success = [result[@"success"] boolValue];
if(success){
// Account exists, parse the data
NSDictionary *data = [result objectForKey:@"data"];
messageArray = [data objectForKey:@"message"];
// NSLog(@"count %@", message);
}
});
});
答案 0 :(得分:1)
所以要包装:如果你是异步加载数据,你必须重新加载表View(或任何显示数据的东西,并在数据到达之前绘制),因为当一个视图加载时,它会根据它在那一瞬间的数据。
为此,请将以下命令添加到数据到达的位置(通常进入成功块,除非您想在故障块上显示一些数据):
[self.tableView reloadData];
另一方面,如果调用是同步的(很少使用),它会挂起执行调用的应用程序(通常在viewDidLoad中),因此仅在数据到达后绘制显示,从而显示数据。
答案 1 :(得分:0)
可能是细胞在IB中被定义为静态而非动态?你应该先检查一下。