2010-07-12 37 views
1

我的代码在通过cellForRowAtIndexPath约九次后跳过if(cell == nil)时出现问题。然后我的表中的项目开始重复,每9个项目就这样做。当我删除if(cell == nil)行时,表格会很漂亮,所有数据都按正确的顺序排列。但是,如果我滚动到表格的底部,我的应用程序崩溃,所以这不是一个好的解决方案。请任何想法?当我尝试重新使用tableviewcells时,重复的TableViewCell会显示出来......我如何获得新的显示?

谢谢!

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 


    if (cell == nil) { 

     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];  


    NSString *temp = [[views objectAtIndex:indexPath.row] objectForKey:@"racer"]; 
    NSString *val = [[views objectAtIndex:indexPath.row] objectForKey:@"pointsScored"]; 

    // Set up the cell... 
    cell.textLabel.text = temp; 
    cell.textLabel.font = [UIFont boldSystemFontOfSize:15]; 
    cell.detailTextLabel.text = val; 

    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 

    [temp release]; 
    [val release]; 

    } 

    return cell; 
} 

回答

0

KLevSki,

那是因为你是通过dequeueReusableCellWithIdentifier这是iPhone平台上的好东西再利用的tableview细胞。什么情况是这样的:

1)细胞在if (cell==nil)部分

2)一旦一个数创建细胞的产生(在你的情况下,其中9,根据大致有多少显示在屏幕上),操作系统开始重新使用表格单元作为一个好的内存管理器,而不是为每一行创建一个独特的表格单元,这可能会占用大量内存

3)由于单元格正在被重新使用,需要在if (cell==nil)区块更新/更改每个单元格上的信息之后进行。

作为一个例子......如果你创建了一个只有一个图标和一个标签的单元格,每次单元格滚动到视图中时,都会更新图标和标签,以适应任何图像/字符串那个小区。

对于您的情况:

... 

if (cell == nil) { 

    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];  

    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 

} 

// update cell 
cell.textLabel.text = [[views objectAtIndex:indexPath.row] objectForKey:@"racer"]; 
cell.textLabel.font = [UIFont boldSystemFontOfSize:15]; 
cell.detailTextLabel.text = [[views objectAtIndex:indexPath.row] objectForKey:@"pointsScored"]; 

return cell; 
+0

哇!非常感谢!情况就是这样!但是,现在当我运行它并向下滚动时,出现此错误: 2010-07-12 15:48:05.753 TabTabTab [25374:20b] *** - [UICGColor isEqualToString:]:无法识别的选择器发送到实例0x3d9edc0 2010-07-12 15:48:05.755 TabTabTab [25374:20b] ***由于未捕获异常'NSInvalidArgumentException',原因:'*** - [UICGColor isEqualToString:]:无法识别的选择器发送到实例0x3d9edc0' 任何想法?? – Rossi 2010-07-12 19:49:53

+0

不要紧!我删除了释放线,事情进展顺利!非常感谢你的帮助。我真的很感激 – Rossi 2010-07-12 20:05:47

+0

没有问题,但请看我更新的帖子。你不能只删除'释放'行,否则你将会泄漏这些对象,因为它们永远不会被释放。相反,只是摆脱它们,因为你不需要它们(请参阅我的代码)。请将此问题标记为已通过点击旁边的“复选框”回答 – iwasrobbed 2010-07-12 20:26:00

相关问题