当我将Viewcontroller设置为根导航控制器时,我收到发现的nil错误

时间:2018-07-07 11:12:20

标签: swift appdelegate viewdidload

当我将ViewController设置为文件Appdelegate.swift中的根导航控制器时,如下所示:

var viewcontroller=ViewController();
var rootnavigationcontroller=UINavigationController.init(rootViewController: viewcontroller);
self.window?.rootViewController=rootnavigationcontroller;

然后我像这样配置ViewController:

class ViewController: UIViewController,CLLocationManagerDelegate,MKMapViewDelegate{
    @IBOutlet weak var MapView: MKMapView!

    override func viewDidLoad() {
        super.viewDidLoad()

        loadLaunchScreen();
        Initilize();//Here configure the MapView parameters;
    }

然后在函数Initilize();中收到错误消息,表示MapView已找到nil。

但是,如果我没有将此Viewcontroller设置为Appdelegate.swift中的rootnavigationcontroller,我将运行良好。

我想问为什么以及如何解决?

2 个答案:

答案 0 :(得分:1)

如果您使用情节提要,请尝试

    let stroyboard = UIStoryboard.init(name: "storyboardname", bundle: nil)//nil if its not out of your project
    let ViewController = storyboard.instantiateViewController(withIdentifier: "yourstoryboadid")
    var rootnavigationcontroller=UINavigationController.init(rootViewController: viewcontroller);
    self.window?.rootViewController=rootnavigationcontroller;

当您使用Storybords时,可能会发生上述问题,并且您不是从情节提要中实例化viewController的,那是因为您的出口未绑定到出口,而发现nil不受限制

如果您不使用情节提要,则您的代码是完美的

答案 1 :(得分:0)

如果您不添加rootnavigationcontroller,那么您的ViewController代码将不会执行。这样您就不会收到任何错误。为了成功实现MapView,请将您的MapView @IBOutlet绑定到情节提要或XIB中。