2016-11-30 2 views
0

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

Я пытаюсь добавить массив UIViewController s к UIPageViewController. Однако всякий раз, когда я пытаюсь получить доступ к контроллеру представления с помощью метода instantiateViewController, я получаю ошибку SIGABRT.

let vc: UIViewController = self.storyboard?.instantiateViewController(withIdentifier: views[index]) as! UIPageViewController 

Вот мой весь файл ViewController.swift только для справки.

import UIKit 

class ViewController: UIViewController { 

    var pageViewController: UIPageViewController! 
    var views: [String] = ["view1","view2"] 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.pageViewController = self.storyboard?.instantiateViewController(withIdentifier: "pageViewController") as! UIPageViewController 

     var arr: [UIViewController] = [] 

     for i in 0..<views.count{ 

      arr.append(assignView(index: i)) 

     } 

     self.pageViewController.setViewControllers(arr, direction: .forward, animated: true, completion: nil) 

     self.addChildViewController(self.pageViewController) 
     self.view.addSubview(self.pageViewController.view) 
     pageViewController.didMove(toParentViewController: self) 

    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    func assignView (index: Int) -> UIViewController{ 

     let vc: UIViewController = self.storyboard?.instantiateViewController(withIdentifier: views[index]) as! UIPageViewController 

     return vc 

    } 


} 

Может кто-нибудь сказать мне, почему мой код бросает мне эту ошибку?

Большое вам спасибо!

+1

Вы полностью вставляете ошибку? Готовьте, что консоль всегда будет пытаться предоставить осмысленные сообщения обратно ... так что вы можете легко отлаживать – Honey

+0

Правильно ли вы назначили идентификаторы viewController? – Miknash

ответ

0

Из строки ниже: self.storyboard? .instantiateViewController (withIdentifier: "pageViewController") как! UIPageViewController

Кажется, что раскадровка рассматривается как дополнительная. Может быть, переменная раскадровки становится нулевой, когда вы пытаетесь получить к ней доступ. Иначе она не должна быть нулевой и не должна быть необязательной. Если факультативно целенаправленно сделано, вы можете применить «если да», чтобы проверить, прежде чем вы получите доступ.

Сообщите мне, если вам нужно уточнить подробное описание.

+0

Это не сделано специально. Итак, как мне с этим бороться? Я пробовал использовать! а не? но он все еще не работает.Вы знаете, как я могу сделать раскадровку не ноль? –

0

SIGABRT - управляемая авария, и приложение прекращено в основном по назначению. В основном это было вызвано ошибкой программиста.

Ищите следующее, поскольку есть две возможные причины аварии.

  1. self.storyboard не получил должным образом инициализацию, так как нет соответствующей раскадровки или неправильно передана.
  2. Идентификатор контроллера неправильно указан.
0

Рассмотрим следующий пример

var mainView: UIStoryboard! mainView = UIStoryboard(name: "Main", bundle: nil) let samplecontroller : UIViewController = mainView.instantiateViewController(withIdentifier: "iPhone")

В приведенном выше примере MainView это моя инстанция со ссылкой на раскадровке, который неявно развернутый (это делается с целью определить, что это не может быть нулевым) samplecontroller является экземпляром сцены в storyBoard. «iPhone» - это имя StoryBoardID сцены.

Этот фрагмент будет гарантировать, что mainView никогда не будет равен нулю, если моя раскадровка будет правильно настроена с использованием идентификаторов и имен.

После этого вы можете иметь проверку безопасности, как

if let test = mainView { //Do your stuff }

Позвольте мне знать, если это помогает.

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