我试图使用" reloadData
" uitableView
上的方法,它似乎有效(正在调用dataSource
方法),当我调试" cellForRowAtIndexPath
"它返回的单元格是正确的单元格)但是我看不到单元格(numberOfRowsInSection
正在改变并为每个新单元格添加空格 - 所以它似乎不是线程问题)。例如,如果我有tableView
5"名称" (我的数据数组名为" namesArray")我添加2将在tableView
上显示5个名称和2个无细胞。问题似乎是cellForRowAtIndexPath
。
cellForRowAtIndex:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//Creating "cellIdentifier"(NSString) with "Cell" as the value
NSString *cellIdentifier=@"Cell";
[tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:cellIdentifier];
//Creating a default cell using "cellIdentifier"(NSString)
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
if (cell==nil) {
cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
cell.textLabel.text=[namesArray objectAtIndex:indexPath.row];
//Returning cell
return cell;
}
numberOfRowsInSection:
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.namesArray.count;
}
-(void)addNameToNamesArray:(NSString*)name
{
[self.namesArray addObject:name];
NSLog(@"namesArray lastObject: %@",[self.namesArray lastObject]);
//NSLog print: The correct name (the one that was added)
[self.tableView reloadData];
}
答案 0 :(得分:0)
这可能是因为您更新了数组中的数据,但表视图尚未访问该数据,从而导致您看到的nil单元格。由于您的单元格正确加载了数组中的初始5元素,因此您可能根本没有刷新表格视图的数据。尝试使用[tableView reloadData] 之后将新元素添加到数组中。
编辑1 如何将cellForRowAtIndexPath代码更改为:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
//Creating "cellIdentifier"(NSString) with "Cell" as the value
NSString *cellIdentifier=@"Cell";
//Creating a default cell using "cellIdentifier"(NSString)
UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
cell.textLabel.text = [self.namesArray objectAtIndex:indexPath.row];
NSLog(@"name: %@", cell.textLabel.text);
//Returning cell
return cell;
}
告诉我们NSLog的输出。
答案 1 :(得分:0)
更改为
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//Creating "cellIdentifier"(NSString) with "Cell" as the value
static NSString *cellIdentifier=@"Cell";
//[tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:cellIdentifier];
//Creating a default cell using "cellIdentifier"(NSString)
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell==nil) {
cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
cell.textLabel.text=[namesArray objectAtIndex:indexPath.row];
//Returning cell
return cell;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.namesArray.count;
}
设置tableview的出口,然后在addNameToNamesArray方法中添加元素后重新加载tableview
答案 2 :(得分:0)
你打电话
[tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:cellIdentifier];
在cellForRowAtIndexPath里面!
你不觉得这有点晚了吗?如果它有效,你会经常调用它吗?如果出列了......当一个类注册时返回nil,就会出现严重错误。
答案 3 :(得分:0)
1.确保您已在self.namesArray
viewDidLoad
尝试以下方法:
[tableView registerClass:[UITableViewCell class]forCellReuseIdentifier:cellIdentifier];
如下所示:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
cell.textLabel.text = [namesArray objectAtIndex:indexPath.row];
return cell;
}
答案 4 :(得分:0)
你的代码完全没问题。可能有一些可能性不适合你。
如果您可以分享该类的整个代码,就像您调用方法以及您正在使用的每个代表一样。