Проблема во время выполнения - «вложенная push-анимация» при использовании executeSegueWithIdentifier - PullRequest
4 голосов
/ 24 января 2012

У меня есть NavigationController, в котором есть TableView.Ячейка в телевизоре имеет "модальный" переход, который указывает на TableViewController (Class: Details.h / .m).Когда я выбираю ячейку, меня переводят в TableViewController, как и ожидалось.

Однако мне нужно добавить следующие функции:

1) нажать на пункт назначения, чтобы я получил приятную кнопку возврата.
2) передать различную информацию об объекте в выбранной ячейке в TVC назначения.

Для этого я выполняю следующие задачи:

1) Измените последовательность на «push» и дайте ейидентификатор "segueToDetails"
2.1) добавить код в метод didSelectRowAtIndexPath (ниже)

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self performSegueWithIdentifier:@"segueToDetails" sender:self];
}

2.2) добавить код в метод prepareForSegue (ниже)

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    NSIndexPath *selectedIndexPath = [self.tableView indexPathForSelectedRow];
    NSInteger rowNumber = selectedIndexPath.row;

    myObject = (MyObject *) [myArray objectAtIndex:rowNumber];

    Details *details = [segue destinationViewController];
    details.detailsObject = myObject;
}

2.3)чтобы подтвердить, что информация об объекте передается в пункт назначения, я вывожу некоторые данные, используя NSLog (ниже)

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSLog(@"name: %@", detailsObject.name);
}

Теперь, когда я запускаю проект и выбираю ячейку в таблице, меня доставляют к целевому TVCЯ вижу вывод NSLog, который хорош.У меня также есть хорошая кнопка назад.Но подождите, когда я нажму назад, у меня есть другая кнопка назадНажатие на кнопку «Назад» возвращает меня туда, откуда я изначально пришел.Окно отладчика показывает это сообщение каждый раз, когда я перехожу к целевому TVC.

2012-01-24 13:55:58.240 MyApp[26875:11603] nested push animation can result in corrupted navigation bar
012-01-24 13:55:58.593 MyApp[26875:11603] Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.
2012-01-24 13:55:58.593 MyApp[26875:11603] Unbalanced calls to begin/end appearance transitions for <SpotDetails: 0x7a7a370>.

Любые предложения о том, как решить эту проблему?

PS - я использую Xcode 4.2 с ARC,iOS 5

Ответы [ 6 ]

13 голосов
/ 25 января 2012

Вы нажимаете на вид дважды;один раз в раскадровке и один раз в didSelectRowAtIndexPath.Когда вы подключаете переход в раскадровке, не связывайте его напрямую с ячейкой таблицы, а скорее с контроллером представления, чтобы вы могли выполнять переход программно вместо раскадровки, делая это за вас, когда вы нажимаете ячейку.

12 голосов
/ 24 января 2012

Если у вас есть модальный переход в раскадровке, вам не нужен код в didSelectRowAtIndexPath :. Раскадровка сделает все остальное. Если вы попытаетесь сделать переход вручную, а также поместить его в раскадровку, у вас будут проблемы.

3 голосов
/ 24 января 2012

Вы переопределили viewWillAppear / viewDidAppear / viewWillDisappear / viewDidDisappear?Вы не забыли позвонить super из переопределения?

1 голос
/ 10 июня 2013

У меня было segues, которые возвращались к моему главному навигационному контроллеру, который вызывал это.Я исправил проблему, установив основной контроллер навигации обратно на вершину стека.Вот код:

- (void) viewDidAppear:(BOOL)animated
{
    [self.navigationController popToRootViewControllerAnimated:NO];
}
0 голосов
/ 18 декабря 2013

Я столкнулся с этой проблемой, когда дважды случайно нажал на следующий viewController.Это произошло, когда я забыл удалить push segue, который использовал для тестирования.Поэтому прежде всего проверьте глупую ошибку, дважды ли вы нажали ее вручную

0 голосов
/ 11 августа 2012

Просто хочу добавить мое решение моей проблемы в эту ветку на случай, если у кого-то возникнет та же проблема, что и у меня.

Я скопировал кнопку, а затем подключил ее.Это сработало, но я получил эту ошибку.

Оказалось, что я пропустил слишком отмену старого соединения на скопированной «новой» кнопке, поэтому у меня было два соединения, новое и старое.Просто удалил старое и все заработало.

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