2015-11-02 3 views
1

Простой SEGUE, который работал в течение нескольких месяцев, проведенных с помощью этой команды:Простой переход не работает в Xcode 7

[self performSegueWithIdentifier:@"ExpirationWarningSegue" sender:self]; 

дает теперь эта ошибка:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not perform segue with identifier 'ExpirationWarningSegue'. A segue must either have a performHandler or it must override -perform.'

Что? Это череп. Я перетаскиваю команду из одного UIViewController в другой в раскадровке. Я не пишу код для этого. Этот сегмент определяется в раскадровке с помощью этого точного идентификатора.

Почему это происходит сейчас, когда я обновился до xcode 7, когда он работал нормально?

+1

Возможность: В интерфейсе Builder он настроен как пользовательский, и именно поэтому он просит вас переопределить/выполнить/выполнитьHandler ... Измените его на все, что угодно, но не обычай. – Larme

+1

Я не понимаю здесь голосов. Это законный вопрос. Этот код работал отлично, пока xcode 7/ios 9 не начал отклонять его. Да, я неправильно использовал пользовательский segue - это ответ на проблему. Но сообщение об ошибке не объяснило это, на мой взгляд, и Apple вдруг решила отказаться от этой структуры. – Alex

+0

Я не спускал вниз, но быстрый поиск в Google с помощью «A segue должен либо иметь performHandler, либо он должен отменять выполнение». будет указывать на проблему. Ну, в другом случае ответ мата довольно лучше, чем тот, который был найден там: http://stackoverflow.com/questions/32309909/perform-segue-with-identifier-wont-work-in-swift-2 – Larme

ответ

6

Сообщение об ошибке говорит вам именно то, что проблема:

'Could not perform segue with identifier 'ExpirationWarningSegue'. A segue must either have a performHandler or it must override -perform.'

Это обычай переход. Поэтому он должен реализовать perform.

Прохладная функция Xcode 7/iOS 9 заключается в том, что вы можете использовать пользовательский сегмент, даже если вы уже указали серию push (show) или существующий (модальный) сегмент. В этом случае ваш perform должен позвонить super, чтобы получить исходное поведение.

+0

Спасибо за ответ. То, что вы называете «круто», я называю болью в шее. Однако я благодарен за ответ. Спасибо! – Alex

+0

BTW, я почтительно не согласен с тем, что сообщение об ошибке сообщает мне, в чем проблема. Проблема в том, что я неправильно использовал пользовательский сеанс без использования функции performHandler. Сообщение об ошибке не ссылается на пользовательский сегмент, который лежит в основе проблемы. – Alex

0

Просмотреть комментарии here. Это простая пользовательская реализация segue в objC. Портирование его на быстрое, тривиально.

Смежные вопросы