UITableview dequeueReusableCellWithIdentifier false结果

时间:2010-10-11 07:51:58

标签: iphone

我做了以下代码,我从中获得了10个索引的重复结果。 (indexPath.row)

我的数据是在词典中 可能是什么原因?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSUInteger index = indexPath.row;    
NSLog(@"Current cell index : %d",index);
static NSString *CellIdentifier = @"CellIndetifier";
BOOL isCellSelected = NO;
//ListViewCell *cell = (ListViewCell *)[table dequeueReusableCellWithIdentifier:CellIdentifier];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {        
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewStylePlain reuseIdentifier:CellIdentifier] autorelease];
    NSString * text = nil;
    if(isMultipleSelect){            
        text = [dicData objectForKey:[sortedData objectAtIndex:index]];
        if([sIndexes containsObject:[sortedData objectAtIndex:index]]){
            isCellSelected = YES;                
        }
    }
    cell.textLabel.text = text;

}    
return cell;

}

2 个答案:

答案 0 :(得分:4)

您得到错误的结果,因为您只在创建单元格时设置单元格的文本,而同一单元格可用于多个不同的行。您需要在创建单元格块之外移动文本设置代码:

if (cell == nil) {        
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewStylePlain reuseIdentifier:CellIdentifier] autorelease];
}

NSString * text = nil;
if(isMultipleSelect){            
    text = [dicData objectForKey:[sortedData objectAtIndex:index]];
    if([sIndexes containsObject:[sortedData objectAtIndex:index]]){
        isCellSelected = YES;                
    }
}
cell.textLabel.text = text;  

答案 1 :(得分:1)

您需要像这样重构代码:

if (cell == nil) {        
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewStylePlain reuseIdentifier:CellIdentifier] autorelease];
}

NSString * text = nil;
if(isMultipleSelect){            
    text = [dicData objectForKey:[sortedData objectAtIndex:index]];
    if([sIndexes containsObject:[sortedData objectAtIndex:index]]){
        isCellSelected = YES;                
    }
}
cell.textLabel.text = text;

if (cell == nil)路径是在dequeueReusableCellWithIdentifier:未返回任何内容时分配新单元格。对于这两种情况,其余代码需要相同:设置单元格。