IOS 6 - программный запуск Unwind Segue ничего не делает

При запуске моего приложения он программно показывает LoginViewController с помощью segue. Контроллер представления представлен в виде переходного набора для перекрестного растворения. После успешной проверки подлинности я хочу отклонить вид входа, запрограммировав запуск сеанса размотки. Поэтому я добавил это в свой заголовочный файл:

- (IBAction)unwindSegue:(UIStoryboardSegue *)segue;

теперь в IB я могу управлять перетаскиванием из "Login FileController" "File Owner" на кнопку "Выход" и выбрать unwindSegue:. Это создает ручной отступ, он отображается в инспекторах подключений для владельца файла и кнопки выхода правильно. Затем я нажимаю на вновь созданный Unwind segue со сцены в IB, а затем даю ему имя. Если я нажму кнопку "перейти к" для действия "разматывать", это приведет меня к заявлению, упомянутому выше.

Пока все хорошо, я запускаю этот разворот после успешной аутентификации в моем блоке GCD:

....
dispatch_async(dispatch_get_main_queue(), ^
{
    [self performSegueWithIdentifier:@"UnwindSegueIdentifier" sender:self];

    [self.spinner removeFromSuperview];
    self.spinner = nil;
});

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

Точка прерывания в реализации unwindSegue: никогда не попадает. Ошибок не было. На консоль ничего не записывается. Идентификатор правильный, я проверял тройку (иначе он все равно будет терпеть неудачу).

Я посмотрел ответы здесь, здесь и здесь, но я, кажется, ничего не пропустил.

Я заметил, что Xcode считает, что unwindSegue: связан с не: linked? not linked?

Я не могу перетащить из маленького пустого круга перед unwindSegue: и связать его с кнопкой "Выход".

Любая помощь будет оценена.

Ответ 1

Если вы используете modal segue для перехода к вашему виду входа в систему, все, что вам нужно вернуться, - это позвонить

[self dismissViewControllerAnimated:YES completion:nil];

Точнее, вы должны называть его на контроллере представления (ваш первый контроллер), но он будет перенаправлен, если вы вызовете на представленном контроллере. Вы можете использовать блок завершения, необходимый для очистки. Нет необходимости использовать GCD.

ИЗМЕНИТЬ

Чтобы ответить на дополнительный комментарий: я не совсем уверен в вашем описании, но, похоже, вы реализовали операцию разворота в представленном контроллере вместо представления > контроллер. Развяжите сегменты, чтобы позволить что-то сделать у вызывающего (например, установочные данные) без дополнительного протокола.

Ответ 2

Цитата из Технической заметки Apple об отключении Segue: Чтобы добавить разворот, который будет запускаться только программным способом, выполните управление + перетащите значок значка режима сцены на значок выхода, а затем выберите всплывающее меню для разворота нового сегмента.

Ссылка на техническую ноту