2016-06-29 3 views
2

Я пытаюсь реорганизовать один из моих ViewControllers, разделив его. Это приложение, которое будет делать карточные операции. У меня был контроллер, который мог редактировать несколько типов перетасовки, но теперь я разделяю его на отдельные контроллеры для каждого отдельного типа тасования.performSegueWithIdentifier throws unknown exception

Существует еще одна доска для разговора, которая позволяет вам выбирать ходы, она настроена на переход от скрытых кнопок. Сегменты указывают на ссылки на раскадровку. Первоначально я сделал сцены для segues в доске сообщений, а затем реорганизовал их с помощью редактора Xcode> Refactor to Storyboard.

Затем я сделал новую раскладку для контроллера вида FaroEditor. Затем я попытался выяснить, как добавить ссылку на эту раскадровку. Наконец, я нашел ссылку «Раскадровка» в галерее объектов.

Я положил это в диспетчерском раскадровки, и установите его, чтобы указать на FaroEditor раскадровку:

Storyboard

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

Когда я бегу и вызвать SEGUE, я получаю исключение, брошенный, без информации, как к тому, что это:

Backtrace

Опять же, я использовал Photoshop, чтобы скопировать и вставить три верхние кадры стека в одно изображение.

Я немного потерял информацию о том, как диагностировать и исправить это. Есть идеи?

+0

Что 'segueId' равна в этой точке? – WMios

+0

В обратном направлении это «editFaro», и это идентификатор segue в исходной раскадровке. – RickDeNatale

+0

Я провел еще несколько исследований. Я прошел через машинный код, и он взрывается, когда вызывается StoryBoard.instantiateViewControllerWithIdentifier:. Я не смог дешифровать, где он получает идентификатор, который он использует. В отладчике я могу создать экземпляр целевой раскладки, а затем instantiatteViewControllerWithIdentifier: используя назначенный вручную идентификатор, но я не знаю, как код UIKit получает то, что, по-видимому, является неправильным идентификатором для контроллера вида. Это не удается, если я вручную даю контроллеру представления идентификатор или нет. – RickDeNatale

ответ

1

Вам нужно добавить «раскадровку ID» на представлении вы ссылаетесь, а затем добавить тот же идентификатор ссылочного ID в атрибутах Инспектора

0

операция пользовательского интерфейса должна быть сделана в основном потоке

DispatchQueue.main.async { 
self.performSegue(withIdentifier: "someSegue", sender: self) 
} 

Важно Используйте классы UIKit только из основного потока или главной диспетчерской очереди приложения, если не указано иное. Это ограничение относится, в частности, к классам, полученным из UIResponder, или к управлению пользовательским интерфейсом вашего приложения.

developer.apple.com/documentation/uikit