Выполнение программной передачи после размотки

У меня есть два контроллера просмотра, V1 и V2. V1 представляет V2 модальным переходом в раскадровке. У меня тогда есть раскручивание, которое отклоняет V2, чтобы перейти к V1. Затем вызывается действие Готово. Он печатает правильный NSLog's, однако [self performSegueWithIdentifier:@"viewmessagessegue" sender:self] не инициируется. Я использую ту же строку кода при нажатии кнопки в V1, и в этом случае она работает правильно. Я не понимаю, почему это не называется...

- (IBAction)done:(UIStoryboardSegue *)segue {
    SendToViewController *cc = [segue sourceViewController];
    _users = cc.recipients;
    NSLog(@"users: %@",_users"); // has the correct data
   [self performSegueWithIdentifier:@"viewmessagessegue" sender:self];
    NSLog(@"perform segue...:"); // this gets printed
}

1 ответ

Решение

Я не уверен в ответе на этот вопрос, но я думаю, что когда выполняется "done:", он действительно не выполняется в этом классе (имеется в виду класс предыдущего экрана). Он либо выполняется в промежуточном месте, либо в вызывающем классе (имеется в виду класс экрана, с которого вы пытаетесь раскрутиться). Если это так, он попытается выполнить prepareForSegue: со стороны раскрутки, а не со стороны V1, и, поскольку там, вероятно, нет segue.identifier, он просто продолжает работу, как если бы он не нашел.... не воспринимайте это как Евангелие... Я думаю, здесь, но я не слишком далеко от цели. Вы могли бы, вероятно, поместить NSLog в V2 prepareForSegue: чтобы проверить это.

Другие вопросы по тегам