Cocoa - UITableViewController奇怪的行为!

时间:2011-04-11 14:18:19

标签: iphone cocoa-touch

我对此失去了理智:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *MyIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier]; 

    UILabel *label;

    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];
        label=[[UILabel alloc]initWithFrame:CGRectMake(20, 20, 200, 30)];
        [cell addSubview:label];
        [label setText:[NSString stringWithFormat: @"%d",indexPath.row]];
    }

    return cell;
}

在单元格的标签中,我看到这个数字而不是我期待的进展(0,1,2,3,4 ......):

0 1 2 0 4 1 2 0 4 1

任何想法错误在哪里?似乎我无法理解这一点。

修改 在将单元格== nil {}块后的标签初始化后解决。(不知道为什么我把它放在那里。)

2 个答案:

答案 0 :(得分:2)

您需要执行if 的单元格配置:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier]; 
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];
    UILabel *label=[[UILabel alloc]initWithFrame:CGRectMake(20, 20, 200, 30)];
    [cell addSubview:label];
    [label release];
}   

[label setText:[NSString stringWithFormat: @"%d",indexPath.row]];

哦 - 你应该在添加标签后释放它以避免内存泄漏:)

答案 1 :(得分:0)

试试这个

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

{

static NSString * MyIdentifier = @“Cell”;

UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];

UILabel *标签;

if(cell == nil)

{

   cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];

}

label = [[UILabel alloc] initWithFrame:CGRectMake(20,20,200,30)];

[cell addSubview:label];

[label setText:[NSString stringWithFormat:@“%d”,indexPath.row]];

[标签发布];

返回单元格;