使用pushviewcontroller后,TableView不会滚动

时间:2011-03-16 07:02:43

标签: iphone uitableview xcode4

我有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];

}

谢谢,

安基塔

2 个答案:

答案 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是在头文件中声明的变量,其赋值为零。