当我将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,我将运行良好。
我想问为什么以及如何解决?
答案 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中。