我正在尝试从包含目录
中的文件的数组中填充UITableView
//in my header
@property (strong, nonatomic) NSMutableArray *files;
//in my tableView:cellForRow:atIndexPath:
static NSString *cellid = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellid];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellid];
cell.textLabel.text = [_files objectAtIndex:indexPath.row];
}
return cell;
(在调用此方法之前,_files
设置为[[NSFileManager defaultManager] contentsOfDirectoryAtPath:[self downloadsDir];
这样可以正常工作,并显示正确的文件。
问题是如果我将文件添加到目录,然后使用tableView reloadData
,将添加一个新文件,但标题将是另一个文件的副本。实施例
添加文件前的表格视图
++++++++++++++++++++++++++
text.txt
++++++++++++++++++++++++++
testing.txt
++++++++++++++++++++++++++
添加文件othertest.txt
后的表格视图
++++++++++++++++++++++++++
text.txt
++++++++++++++++++++++++++
testing.txt
++++++++++++++++++++++++++
testing.txt
++++++++++++++++++++++++++
应该是
++++++++++++++++++++++++++
text.txt
++++++++++++++++++++++++++
testing.txt
++++++++++++++++++++++++++
othertest.txt
++++++++++++++++++++++++++
如果我重新启动应用程序,它将显示正确的文件。但由于某种原因,它做到了这一点。任何人都知道可能出错了什么?
答案 0 :(得分:3)
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellid];
cell.textLabel.text = [_files objectAtIndex:indexPath.row];
}
return cell;
除了分配新单元格之外,您没有设置单元格标签文本。试试这个:
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellid];
}
cell.textLabel.text = [_files objectAtIndex:indexPath.row];
return cell;
相同的代码,但是我已经移动了设置单元格文本的行,以便在重用单元格时以及创建新单元格时执行它。