2017-01-13 10 views
1

Недавно изменился, рассматривающим в моем проекте является отправной точкой (со стрелкой, указывающей на него в IB), и теперь я получаю следующее сообщение об ошибке, когда приложение запускается в тренажере:Почему self.currentViewController nil в ViewDidLoad()?

fatal error: unexpectedly found nil while unwrapping an Optional value

ошибка происходит во время ViewDidLoad() представления, которое было отправной точкой, но которой нет сейчас. Честно говоря, даже не уверен, почему он загружается, но это не входит в Swift. Я знаю достаточно, чтобы узнать, ожидаются ли это представление (также) загрузка при запуске или нет. Код, где происходит ошибка:

override func viewDidLoad() { 

    print("Former First View starts DidLoad") 

    // Code to enable the containerView to work: 
    self.currentViewController = self.storyboard?.instantiateViewController(withIdentifier: "SmallViewWithinMainView") 
    self.currentViewController!.view.translatesAutoresizingMaskIntoConstraints = false 
    self.addChildViewController(self.currentViewController!) 
    // Error occurs in the next line: 
    self.addSubview(subView: self.currentViewController!.view, toView: self.SortFilterEtcContainerView) 

    super.viewDidLoad() 

    // ... 

С тестированием self.currentViewController это на самом деле в настоящее время отсутствует, но я не ясно, как исправить ситуацию. Перед изменением, когда в этом представлении началось все, все прошло отлично. Что должно произойти, так что self.currentViewController больше не равен нулю?

+0

super.viewDidLoad() сверху, кажется, что viewcontroller не инициализируется. –

+0

Если 'self.currentViewController' равен нулю, я ожидаю, что ваша ошибка возникнет двумя строками раньше. Вы уверены, что это 'currentViewController', который равен нулю, или это может быть' self.SortFilterEtcContainerView', что равно нулю? – pbasdf

+0

@pbasdf Добавлен код для проверки каждой вещи в отдельности, и это self.currentViewController, который равен нулю, даже с самого начала. Согласитесь, что ошибка не появляется до тех пор, пока она не появится. Что может сделать self.currentViewController нулевым? – ConfusionTowers

ответ

0

Вы должны вызвать

super.viewDidLoad() 

На самой первой строке viewDidLoad функции.

Тогда надлежащее исправление будет остановить силы разворачивания УСТРОЙСТВА

Перед: BAD

// Code to enable the containerView to work: 
self.currentViewController = self.storyboard?.instantiateViewController(withIdentifier: "SmallViewWithinMainView") 
self.currentViewController!.view.translatesAutoresizingMaskIntoConstraints = false 
self.addChildViewController(self.currentViewController!) 

После: ХОРОШЕГО

// Code to enable the containerView to work: 
     if let curView = self.storyboard?.instantiateViewController(withIdentifier: "SmallViewWithinMainView") { 
      curView.view.translatesAutoresizingMaskIntoConstraints = false 
      self.addChildViewController(curView) 
     } else { 
      // Error 
     } 
+0

Цените предложение, но никакой помощи. Такая же строка, как и раньше, имеет ту же ошибку, что и раньше. Обратите внимание, что код прошел нормально, прежде чем я переместил, какой вид получает начальную запись, поэтому, если if curView = ... явно хорошая практика, ни он, ни super.viewDidLoad(), где он был, вызывали ошибку перед сменой , И ошибка, кажется, НЕ заключается в том, что «пусть curView ...» был равен нулю, но, как предложил @pbasdf, другой - toView - равен нулю. Потому что, когда я запускаю simluator сейчас, «// Ошибка» не достигнута - одна и та же строка просто создает ошибку. – ConfusionTowers

1

Та же проблема с Xcode 9 и быстры 3. Я установил его, создав ViewController таким образом:

if let destinationViewController = self.storyboard?.instantiateViewController(withIdentifier: "ReaIDController") as? DetalleIpadViewController 

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

  • Нет связанных вопросов^_^