UITableview在滚动时崩溃

时间:2010-07-14 11:08:40

标签: iphone uitableview

我现在已经坚持这个问题好几天了,我还没弄明白..... 我从基于导航的模板创建了我的项目,它也自动生成了一个tableview。然后我添加了一些部分和一些行,并试图用简单的字符串填充表格的行。一切正常,直到表格达到一定长度的某些部分和行数。 然后第一行的内容也出现在最后两行中,我不明白为什么...... 请帮忙!!! 这是我的代码:

#import "RootViewController.h"


@implementation RootViewController

- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}

- (void)viewDidUnload {
    // Release anything that can be recreated in viewDidLoad or on demand.
    // e.g. self.myOutlet = nil;
}


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 5;
}



- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 2;
}



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

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    if (indexPath.section == 0) {
        if (indexPath.row == 0) {
            cell.textLabel.text = @"test";
        }
    }

    return cell;
}


- (void)dealloc {
    [super dealloc];
}


@end

更新:

好吧所以我想我已经得到了但我不知道实际发生了什么事只是巧合,但当我改变了界限时:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

为:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:nil];

它有效......

有人可以向我解释这个???? ; - )

1 个答案:

答案 0 :(得分:0)

正如您已经注意到的,这是由于可重用单元的工作方式。

但是,您确实应该重复使用您的单元格,并始终在tableView: cellForRowAtIndexPath:中重置其内容。

例如,你可以这样做:

cell.textLabel.text = @"";

if (indexPath.section == 0) {
    if (indexPath.row == 0) {
        cell.textLabel.text = @"test";
    }
}

但通常你会为每个细胞提供适当的内容。

编辑:您应该真正阅读Table View Programming Guide,但这是此问题的重要摘录:

  

表格视图的tableView:cellForRowAtIndexPath:数据源实现应该始终在重用单元格时重置所有内容。