UITableCell textLabel超出范围

时间:2011-03-07 00:14:22

标签: iphone objective-c cocoa-touch memory-management

我有一个UITableViewcontroller可以重用于不同的数据--RecipeItems和ConvertedRecipeItems的数组(它是RecipeItem的子类)。

第一次,我查看ConvertedRecipeItems单元格呈现正常。如果我查看单元格的详细信息然后返回,则SECOND ConvertedRecipeItem会使应用​​程序崩溃。在调试时,我发现单元格的textLabel“超出了范围”。我无法弄清楚是什么原因引起的。

请注意,对于常规RecipeItems,这一切都正常。

这是cellForRowAtIndexPath代码:

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

    static NSString *CellIdentifier = @"RecipeCell";

    UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            //we're storing so don't auto-release
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        }

    // Set up the cell...
        NSUInteger row = [indexPath row];
        RecipeItem* r = [recipes objectAtIndex:row];
        cell.textLabel.text = r.name;

    return cell;

}

谢谢!

2 个答案:

答案 0 :(得分:1)

你应该自动释放新创建的细胞;否则你会泄漏那个细胞。

tl和tls的目的是什么?删除这些行,然后重试。我觉得那些可能是罪魁祸首。而且无论如何他们都没有做任何事情。

超出范围的错误很有意思--GDB通常不报告超出properly declared ivars.的范围

答案 1 :(得分:0)

我看不到任何可能崩溃的事情(假设您在tableView:numberOfRowsInSection:中返回正确的计数)。我怀疑这个问题与您的详细信息屏幕有关。什么是崩溃时的控制台输出?

正如Inspire48已经提到的,你应该自动释放新细胞。 “//我们正在存储所以不要自动释放”是不正确的。表存储它们,而不是您的类的实例。