2016-02-10 1 views
1

Я все еще пытаюсь справиться со связыванием UIViewControllers и т. Д. В iOS. У меня было смешное количество вопросов с segues, но это будет моей ошибкой за то, что вы попали в глубокий конец, практически не тренируясь!Swift: Подготовьтесь к работе, но не загрузите ViewController

Во всяком случае, у меня в настоящее время есть prepareForSegue, который отлично работает с каждой строкой, а затем направляется через UINavigationController в пункт назначения. Однако пункт назначения UIViewController не отображается, и приложение тихо вылетает - никаких ошибок вообще.

Есть ли способ получить какой-либо список потенциальных причин такого сбоя на основе опыта?

Такие вещи, как 'check segue spelling' и 'do not выполнять segues в ViewDidLoad', уже были исключены.

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

Спасибо.

+2

Вы можете поделиться своим кодом и изображением раскадровки? – Ujjwal

+0

Sry ujjwal - У меня нет разрешения на это. На данный момент я предпочел бы способ увидеть ошибки, возникающие при построении контроллеров, потому что тихий крах довольно трудно начать отладку. – RobertyBob

ответ

0

Ok поэтому после поиска высокого и низкого для ошибок в классах, делегатов и т. д. оказывается, что это ошибка в Swift/XCode.

Виновник - это просто TextView на странице, для которого требуется, чтобы текст по умолчанию был пустым, чтобы страница загружалась. Любой текст по умолчанию должен быть установлен в viewDidLoad.

Полное решение содержится здесь - iOS 9 Segue Causes App To Freeze (no crash or error thrown)

Было бы еще хорошо знать, есть ли способ, чтобы увидеть журнал ошибок выброшенных во время просмотра инициализации, но в этом случае все сводится к незначительному элементу на вид.

3

Перечни могут быть решены путем реализации протоколов .. Проверьте WWDC следующее:

https://developer.apple.com/videos/play/wwdc2015-408/

Кроме того, в отношении перетекает, есть несколько вещей, чтобы отметить (то же самое относится и к OSX) ...

Примечание:

я) а переход, по определению является переход между одной одной части к другой (сцены в фильме или его часть в музыке). Таким образом, они предназначены, чтобы быть «сват», когда дело доходит до просмотра контроллеров ...

i.e. ViewController1 <-- segue ->> ViewController2 

II) Если подкласс и переопределить prepareForSegue вы рассказываете свой код, который вы хотите обработать переход сам. т.е. в UITabviewController (или NSStabViewController), то переопределить их поведение по умолчанию с некоторыми вы хотите реализовать свои собственные в переопределениях

Часть 1) PrepareForSegue - Перед тем как это происходит:

Здесь инстанцировании, настроить , настроить и т. д. ... ваши контроллеры просмотра. Если они уже настроены, тогда вы должны быть супер-призванием здесь.

//i.e. super.PrepareSegueForIdentifier(identifier) 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "something" { 
     // Do your thing here 
     // MARK: IFYES 
    } else { 
     prepareForSegue(segue, sender: sender) 
    } 
} 

Если у вас есть работа предварительной подготовки для вашей «быть» контроллера представления, а затем установить его в первой части «если» заявление, которое я отметил «IFYES». Вы создали такие вещи, как анимации, от и до цветов, размеров и т.д. ...

После того как это было сделано, то есть еще один способ:

performSegueWithIdentifier: 

И пример, который я использую:

override func performSegueWithIdentifier(identifier: String, sender: AnyObject?) { 
    if (identifier == "yourIdentifier") { 
     Do something here 
    } else { 
     super.performSegueWithIdentifier(identifier, sender: sender) 
    } 
} 

Это когда segue с идентификатором yourIdentifier на самом деле что-то делает. то естькогда ваш ViewController заезжает действия или функции:

func someFunction(){ 
    self.performSegueWithIdentifier("yourIdentifier", sender: senderObjectName) 
} 

Это, конечно, если вы убедились, что ваш переход в период между контроллерами и т.д. ... имеют правильные идентификаторы и типы ...

+0

Большое спасибо за обширный ответ, Адриан. Насколько я мог сказать, все доходило до segue нормально, но потом проваливалось. Я перенаправил segue на bare-bones ViewController, и он работал нормально, поэтому предположим, что это означает, что на этапах инициализации контроллера назначения есть что-то, что ему не нравится - так что у вас есть начальная точка. – RobertyBob

+0

Вы проверили, что '(i) из-ViewController имеет свой набор классов' '(ii) to-viewController имеет свой набор классов слишком, и что сам segue имеет свой набор классов ... И что segue имеет свой набор идентификаторов тоже? –

+0

Альтернативно застегните его и наденьте на github для меня (и других пользователей SE, чтобы видеть), чтобы мы могли видеть, что происходит :) –

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