我有一个项目,我希望通过UINavigationController在UITableViewController之后打开一个UITableViewController。问题是,当它被这个函数调用时它第一次起作用:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
SDMetadataEntity *entity = [self.optionItems objectAtIndex:indexPath.row];
SudzcDetailViewController *detailViewController = [[SudzcDetailViewController alloc] init];
detailViewController.refName = entity.Name;
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController release];
[entity release];
}
但是当我按下导航栏上的后退按钮,并再次按下相同的项目时,它会崩溃!当我在第一个UITableViewController中按下不同的项时,它不会崩溃。我真的想从我做错了什么来学习!
答案 0 :(得分:1)
您不应该发布entity
。
你从一个数组获得了该对象,你没有它,所以当你释放它时,你可能会导致它过早地被解除分配。
答案 1 :(得分:1)
你不应该
[entity release];
因为你做的时候
[self.optionItems objectAtIndex:indexPath.row];
你只需要一个指向它的指针,而不是初始化/复制/保留它。