Настоящее представление из SKScene в Xcode 6 с Swift

У меня есть базовая игра, работающая исключительно как SKScene. Я хотел бы перейти к представлению под названием testview.xib, но я не могу найти примеров Swift, как это сделать.

Вот моя попытка, основанная на других ответах

let vc = UIViewController(nibName: "testview", bundle: nil) as UIViewController
self.view.window.rootViewController.presentViewController(vc, animated: true, completion: nil)

но приложение завершается с ошибкой "Thread1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode 0x0)"

Код для перемещения между SKScenes:

var transition:SKTransition = SKTransition.flipHorizontalWithDuration(1)
var scene:SKScene = otherScene(size: self.size)
self.view.presentScene(scene, transition: transition)

person cudds    schedule 09.08.2014    source источник
comment
Можете уточнить, где у вас проблемы? Что произойдет, когда вы попробуете код, который вы разместили? Сбой вашего приложения, вы получаете какие-либо конкретные ошибки и т. д.?   -  person Mike S    schedule 13.08.2014
comment
Конечно. У меня есть представление под названием testview.xib. Я пытаюсь представить это представление из SKScene в iOS 7.1 SDK под управлением xcode 6.4. Я недавно пробовал let vc = UIViewController(nibName: "testview", bundle: nil) as UIViewController self.view.window.rootViewController.presentViewController(vc, animated: true, completion: nil) , и это не удается с Thread 1: EXC_BAD_INSTRUCTION   -  person cudds    schedule 13.08.2014
comment
Спасибо. На первый взгляд, это выглядит так, как будто это должно работать. Можете ли вы отредактировать свой исходный вопрос и добавить всю трассировку стека? Я не уверен навскидку, почему вы получили EXC_BAD_INSTRUCTION, но трассировка стека должна дать немного больше контекста.   -  person Mike S    schedule 13.08.2014
comment
Спасибо - поможет?   -  person cudds    schedule 13.08.2014
comment
Это не пролило на это никакого света, извините. Пробовали ли вы обновиться до Xcode6 Beta5 (вы сказали, что используете Xcode 6.4; я полагаю, вы имели в виду Beta4)? EXC_BAD_INSTRUCTION может быть вызвано тем, что компилятор выдает неправильные инструкции для ЦП, поэтому это может быть ошибка быстрого компилятора.   -  person Mike S    schedule 13.08.2014
comment
Спасибо за совет. Я скачал и попытался скомпилировать тот же код в 6 beta 5 - и получил 5 ошибок, лол. Большинство из них вокруг моих классов SKScene не реализуют обязательные члены своего суперкласса - бла! Но также `self.view.window.rootViewController.presentViewController(vc, анимация: true, завершение: nil)' - UIWindow не имеет члена с именем 'rootViewController' - действительно лол   -  person cudds    schedule 13.08.2014
comment
Хорошо, я думаю, что исправил эту ошибку SKScene, но изменил текущий контроллер представления на self.view.window?.rootViewController.presentViewController(vc, анимированный: true, завершение: nil), но я получаю ту же самую ошибку компилятора :(   -  person cudds    schedule 13.08.2014
comment
Давайте продолжим обсуждение в чате.   -  person Mike S    schedule 13.08.2014


Ответы (1)


Это оказалось проблемой при вызове presentViewController() из метода init() класса. По сути, вы не можете вызывать presentViewController() до настройки представления/контроллера; вместо этого вы, как правило, хотите вызывать его, когда происходит какое-либо действие (нажатие кнопки, событие касания и т. д.).

Проблема, которая начала обсуждаться в комментариях, а затем переместилась в chat было решено путем загрузки контроллера представления из раскадровки вместо xib. ПРИМЕЧАНИЕ. Xib будет работать, но его сложнее настроить, чем раскадровку.

person Mike S    schedule 13.08.2014