我有一个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;
}
谢谢!
答案 0 :(得分:1)
你应该自动释放新创建的细胞;否则你会泄漏那个细胞。
tl和tls的目的是什么?删除这些行,然后重试。我觉得那些可能是罪魁祸首。而且无论如何他们都没有做任何事情。
超出范围的错误很有意思--GDB通常不报告超出properly declared ivars.的范围
答案 1 :(得分:0)
我看不到任何可能崩溃的事情(假设您在tableView:numberOfRowsInSection:
中返回正确的计数)。我怀疑这个问题与您的详细信息屏幕有关。什么是崩溃时的控制台输出?
正如Inspire48已经提到的,你应该自动释放新细胞。 “//我们正在存储所以不要自动释放”是不正确的。表存储它们,而不是您的类的实例。