0

我试图从前 3 个小时中找出这个错误。通过搜索,我知道这个错误与内存管理有关,但我没有弄清楚我做错了什么。

我已经声明了这 4 个标签:

@interface InteractiveHistory : UITableViewController {
UILabel *date;
UILabel *startTime;
UILabel *cal;
UILabel *duration;
}

然后创建属性并合成它们。在 viewDidLoad 中,我都像这样初始化:

date = [[UILabel alloc] init];

我还在 dealloc() 方法中释放了它们。

我想要做的是使用这 4 个标签在表格的单元格中写一些文本。文本将取决于 indexPath。

在 cellForRowAtIndexPath 方法中,仅显示 2 个标签并指示错误行:

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

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

        NSLog(@"constructing cell");

        //set up labels text

        date = [NSString stringWithFormat:@"%@",[[int_data objectAtIndex:indexPath.row] objectForKey:@"Date"]];


 NSLog(@"%@",date.text); //App crashes at this line
       [date setTag:1];


        startTime = [NSString stringWithFormat:@"%@",[[int_data objectAtIndex:indexPath.row] objectForKey:@"Start Time"]]; 

        //setting tag and position of label
        [startTime setTag:2];
        CGRect labelpos =  startTime.frame;
        labelpos.origin.y = date.bounds.size.height + 2;
        startTime.frame = labelpos;

        NSLog(@"labels set");

   // Configure the cell...
    [[cell contentView] addSubview:date];
    [[cell contentView] addSubview:startTime];
    [[cell contentView] addSubview:duration];
    [[cell contentView] addSubview:cal];


    NSLog(@"A cell set");

    }      

    return cell;
}

谁能告诉我我做错了什么?我希望我的问题很清楚..

4

1 回答 1

9

该行:

date = [NSString stringWithFormat:@"%@",[[int_data objectAtIndex:indexPath.row] objectForKey:@"Date"]];

应该:

date.text = [NSString stringWithFormat:@"%@",[[int_data objectAtIndex:indexPath.row] objectForKey:@"Date"]];

否则,您的date指针将设置为 NSString 的实例,而不是设置其内容。

编辑:

正如 danh 正确指出的那样,您将遇到与startTime.

于 2012-06-24T21:54:37.003 回答