非rootViewController视图中的NavigationController问题

时间:2012-01-06 00:45:32

标签: objective-c ios cocoa-touch

最后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中。它现在有什么问题?在它表现良好之前。

3 个答案:

答案 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声明之后(检查你的{})
这就是你最终得到的结果:

  

导航栏子视图树可能已损坏。