Проблема NavigationController в представлении не rootViewController - PullRequest
0 голосов
/ 06 января 2012

Наконец вчера У меня 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 ]

1 голос
/ 06 января 2012

Ошибка в том, что вы дважды нажимаете на новый 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];
}
0 голосов
/ 06 января 2012

Вы делаете что-то дважды.

[self.navigationController pushViewController:items animated:YES];

Получить вызов, если эта строка YES

if(atableView==self.tableView)

Затем он снова получит вызов в методе (после else оператор (проверьте ваш {})
Вот как вы можете получить:

Дерево подпунктов панели навигации может быть повреждено.

0 голосов
/ 06 января 2012

Вы программируете iOS5? Если это так, то вы можете перестать выпускать просмотр контроллера «Предметы». Если у вас включен ARC (автоматический подсчет ссылок), код освободит объект для вас в нужное время. Если вы также отпустите его, вы, вероятно, помещаете контроллер стека в стек, который исчезает, когда навигационный контроллер пытается работать с ним. Это может привести к нестабильному состоянию.

Попробуйте удалить ваши утверждения [предметов выпуска] и посмотрите, поможет ли это.

Rob

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...