我有一个名为MessageDisplay的ViewController,其中以编程方式创建表视图。在同一个ViewController中,有一个按钮,它指向另一个ViewController名称CreateMessage。当用户单击CreateMessage中导航栏中的后退按钮时,MessageDisplay屏幕将加载回来,当我滚动表格时它会崩溃。我在表格视图单元格中添加了uilabel,如cellForRowAtIndexPath
函数内所示。
UILabel *dateLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.view.frame.size.width-60, 8,50,20)];
[dateLabel setFont:[UIFont fontWithName:@"ProximaNovaSoft-Regular" size:13]];
dateLabel.textColor =[UIColor grayColor];
dateLabel.text = [dateArray objectAtIndex:indexPath.row];;
[cell addSubview:dateLabel];
由于dateArray
为空,发生崩溃。数组的值存储在REST调用响应中。数组在' didReceiveResponse'中初始化。功能。我该如何解决这个问题?
答案 0 :(得分:0)
您似乎只应在填充dateArray后加载数据。 您可以在数组为空时跳过组件,并在获得响应时重新加载表(这将刷新视图) - 此解决方案仅在您最初可以显示没有dateLabel的视图时。 另一种解决方案是在收到响应之前不加载任何数据。
答案 1 :(得分:0)
[YOURTABLEVIEW reloadData]
在didReceiveResponse
中(更新dataArray之后)。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return dateArray.count;
}
此外:不要在单元格上添加子视图,而是添加到cell.contentView。
答案 2 :(得分:0)
你可以通过检查你是否越界
来防止崩溃 if ([dateArray count] > indexPath.row) {
dateLabel.text = [dateArray objectAtIndex:indexPath.row];
}
但我猜这个问题来自于该数组不是它应该是什么。 您可以将代码粘贴到指定dateArray值的位置吗?