我的代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = nil;
NSString *homeDir = NSHomeDirectory();
if(indexPath.section == 0){
homeDir = [NSString stringWithFormat: @"%@/%@", homeDir, @"Documents"];
}else{
homeDir = [NSString stringWithFormat: @"%@/%@", homeDir, @"Documents/Archived"];
}
NSFileManager *fm = [NSFileManager defaultManager];
NSArray *dirContents = [fm contentsOfDirectoryAtPath:homeDir error:nil];
dirContents = [[dirContents reverseObjectEnumerator] allObjects];
cell = [tableView dequeueReusableCellWithIdentifier:@"MyCell"];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"MyCell"];
}
UILongPressGestureRecognizer *lpgr = [[UILongPressGestureRecognizer alloc]
initWithTarget:self action:@selector(handleLongPress:)];
lpgr.minimumPressDuration = 1.3; //seconds
[cell addGestureRecognizer:lpgr];
int i = 0;
NSString *filename;
if([dirContents count] > 0){
filename = [[dirContents objectAtIndex:indexPath.row] lastPathComponent];
while(![[filename substringFromIndex: [filename length] - 3] isEqualToString:@"pdf"]){
i ++;
filename = [[dirContents objectAtIndex:indexPath.row + i] lastPathComponent];
}
}else{
filename = @" ";
}
cell.textLabel.text = filename;
return cell;
}
我遇到的问题是,有时只有第一个单元格会重复返回。如果数组读取"红色,蓝色,绿色,黄色"它看起来像是:
红色
红色
红色
红色
这种情况只会偶尔发生。有时刷新表时,它会正确显示,以后才会恢复到不正确的显示。我做错了什么?
答案 0 :(得分:1)
我在上面发表评论,但我会尝试回答,因为我怀疑这会解决你的问题,如果不只是为了展示这里发生的事情。
UITableView应该有一个数据源。在原始代码中,每次表视图创建新单元格时,您都要创建此数据源(数组dirContents
)。看起来您的数据源是静态的,因此您可以在UITableViewDataSource委托方法之外创建它,并将其放在某个位置,例如viewDidLoad
方法。我的一个假设是,没有及时创建这个数组来访问你单元格的元素。
然后,您可以在cell.textLabel.text = filename;
之前确认您的单元格正在使用NSLog从此数组中获取正确的索引。
希望这可以帮助您解决问题。
答案 1 :(得分:1)
Marcel,你必须重新设计你的代码,你已经从viewDidLoad目录中获取了文件名的代码,并将这些名称保存在一个全局数组中,然后在cellForRowAtIndex中使用这个数组。 要在每次下载时刷新tableView,只需重新加载uitableview,因为文件完全被下载。希望它能帮助你!