我有tabbarcontroller应用程序。在第一个标签本身,我有表视图。我没有向NIB文件添加任何内容。我刚刚创建了UITableViewController
的子类。我的细胞是定制的。它确实显示了具有适当值的表。
但是在didSelectRow:
方法上,我调用了pushViewController
。一旦我从pushViewController
按回来并返回到原始屏幕并开始滚动,我的应用程序就会终止。
有人可以帮我解决这个问题吗?
//代码
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[[CustomCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
}
// Configure the cell...
NSString *TitleValue = [listOfTitles objectAtIndex:indexPath.row];
cell.primaryLabel.text = TitleValue;
NSString *DateValue = [listOfDates objectAtIndex:indexPath.row];
cell.secondaryLabel.text = DateValue;
NSString *descValue=[listOfDesc objectAtIndex:indexPath.row];
cell.thirdlabel.text = descValue;
if([unreadFlag objectAtIndex:indexPath.row] == @"0")
{
cell.primaryLabel.font = [UIFont boldSystemFontOfSize:15.0];
}
else {
cell.primaryLabel.font = [UIFont systemFontOfSize:15.0];
}
return cell;
//[CustomCell release];
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 105;
}
#pragma mark -
#pragma mark Table view delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
CustomCell *testcell = [tableView cellForRowAtIndexPath:indexPath];
testcell.primaryLabel.font = [UIFont systemFontOfSize:15.0];
[unreadFlag replaceObjectAtIndex:indexPath.row withObject:@"1"];
selectedNS = [listOfIds objectAtIndex:indexPath.row];
//Initialize the detail view controller and display it.
DetailViewController *dvController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:[NSBundle mainBundle]];
dvController.selectedNS=selectedNS;
[self.navigationController pushViewController:dvController animated:NO];
[dvController release];
dvController = nil;
testcell.primaryLabel.font = [UIFont systemFontOfSize:15.0];
[testcell release];
}
- (UITableViewCellAccessoryType)tableView:(UITableView *)tableView accessoryTypeForRowWithIndexPath:(NSIndexPath *)indexPath {
//return UITableViewCellAccessoryDetailDisclosureButton;
return UITableViewCellAccessoryDisclosureIndicator;
}
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath {
[self tableView:tableView didSelectRowAtIndexPath:indexPath];
}
谢谢,
安基塔
答案 0 :(得分:0)
如果没有看到堆栈跟踪,我敢打赌它是您所选单元格的双重释放。你是以这种方式从tableView中获取它
CustomCell *testcell = [tableView cellForRowAtIndexPath:indexPath];
并且不保留它,然后在方法结束时释放一个你不拥有的对象
[testcell release];
然后当你返回并开始滚动时,tableView可能会因为双重释放而尝试释放该单元格崩溃。只是不要发布你不拥有的东西(使用create,alloc,copy,retain)。
答案 1 :(得分:0)
问题解决了。我只需要为每个单元格提供不同的CellIdentifier
。所以我将代码更改为
NSString *CellIdentifier = [NSString stringWithFormat:@"Cell%d", i];
其中i是在头文件中声明的变量,其赋值为零。