最后yesterday我的UISearchBar工作正常。突然间,我现在面临另一个问题。
当我浏览视图时,导航栏向右移动,同一导航栏再次出现 - >左侧标题和导航按钮相同。 TableView保持不动。 在第二次单击导航按钮时,它是,返回上一个视图。
我得到的注释是:在意外状态下完成导航过渡。导航栏子视图树可能已损坏。
我在这个论坛中浏览过相关问题,但这对我没有帮助。
- (void)viewDidUnload
{
[self setTableView:nil];
[super viewDidUnload];
[self setSearchController:nil];
[self setSearchBar:nil];
}
- (void)tableView:(UITableView *)atableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
Kings *kingsObj;
if(atableView==self.tableView)
{
kingsObj=[self.kingsArr objectAtIndex:[indexPath row]];
Items *items=[[Items alloc]initWithNibName:@"Items" bundle:nil];
items.kingID=kingsObj.kingID;
items.king=kingsObj.kingName;
[self.navigationController pushViewController:items animated:YES];
[items release];
}
else
{
kingsObj=[self.filteredItems objectAtIndex:[indexPath row]];
}
Items *items=[[Items alloc]initWithNibName:@"Items" bundle:nil];
items.kingID=kingsObj.kingID;
items.king=kingsObj.kingName;
[self.navigationController pushViewController:items animated:YES];
[items release];
}
确定。 pushViewController方法在didSelectRowAtIndexPath中。它现在有什么问题?在它表现良好之前。
答案 0 :(得分:1)
错误是因为您要两次推送新的ViewController。您可以像这样简化didSelectRowAtIndexPath
代码:
- (void)tableView:(UITableView *)atableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
Kings *kingsObj;
if (atableView==self.tableView) {
kingsObj = [self.kingsArr objectAtIndex:[indexPath row]];
} else {
kingsObj = [self.filteredItems objectAtIndex:[indexPath row]];
}
Items *items=[[Items alloc]initWithNibName:@"Items" bundle:nil];
items.kingID=kingsObj.kingID;
items.king=kingsObj.kingName;
[self.navigationController pushViewController:items animated:YES];
[items release];
}
答案 1 :(得分:0)
你在编程iOS5吗?如果你那么你可能会过度释放你查看控制器“项目”。如果您打开了ARC(自动引用计数),代码将在适当的时间为您释放对象。如果你也发布了它,你可能正在推动堆栈上的视图控制器,当导航控制器试图使用它时它就会消失。这会导致情况不稳定。
尝试删除[items release]语句,看看是否有帮助。
罗布
答案 2 :(得分:0)
你正在做两次事。
[self.navigationController pushViewController:items animated:YES];
如果此行为YES
if(atableView==self.tableView)
然后在方法中稍后再次打电话(在else
声明之后(检查你的{})
这就是你最终得到的结果:
导航栏子视图树可能已损坏。