当我设置 Viewcontroller 是根导航控制器时,我收到 found nil 错误

When I set the Viewcontroller is the root navigation controller, I recieve the found nil error

当我设置 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,我会运行很好。

我想问一下为什么会这样,怎么解决?

如果您不添加 rootnavigationcontroller,那么您的 ViewController 代码将不会被执行。所以你不会得到任何错误。要成功实施 MapView,请在情节提要或 XIB 中绑定您的 MapView @IBOutlet

如果您使用的是故事板,那么试试这个

    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;

当您使用故事情节并且您不是从情节提要中实例化 viewController 时,当您的出口发现 nil 时可能会发生上述问题,因为它不受出口限制

如果您不使用故事板,那么您的代码是完美的