我正在尝试在我的谷歌地图上添加一个标签栏,但是,每当我运行此代码时,xcode总是崩溃并告诉我“致命错误:在解开一个可选值时意外发现了nil”
这是我的代码:
@IBOutlet var tabControlller: UITabBar!
override func loadView() {
let camera = GMSCameraPosition.cameraWithLatitude(25.0330, longitude: 121.5654, zoom: 6.0)
let mapView = GMSMapView.mapWithFrame(CGRectMake(10, 10, 10, 10), camera: camera)
mapView.myLocationEnabled = true
mapView.settings.tiltGestures = true
mapView.settings.rotateGestures = true
view = mapView
view.insertSubview(tabControlller, aboveSubview: mapView)
// Creates a marker in the center of the map
let marker = GMSMarker()
marker.position = CLLocationCoordinate2D(latitude: 25.0330, longitude: 121.5654)
marker.title = "Taipei"
marker.snippet = "Taiwan"
marker.map = mapView
let mapInsets = UIEdgeInsets(top: 100.0, left: 0.0, bottom: 0.0, right: 0.0)
mapView.padding = mapInsets
}
我很确定错误来自view.insertSubview(tabControlller,aboveSubview:mapView)但是,我不确定如何在我的谷歌地图上添加该标签栏?我是通过编程方式还是通过IB来完成的?
感谢您的帮助!
答案 0 :(得分:0)
答案 1 :(得分:0)
您获得的错误是因为展开包含nil的可选变量。
在您的代码中tabControlller
是可选的。
当您在以下地方使用它时:
view.insertSubview(tabControlller, aboveSubview: mapView)
它试图解开tabControlller
并使用它。
但是直到这一点tabControlller
可能没有初始化为任何对象,所以它包含nil。所以当打开nil时,应用程序会崩溃。
这就是你获得fatal error: unexpectedly found nil while unwrapping an Optional value
同样UITabBar
无法添加到控制器的顶部。相反,您可以使用UISegmentedControl
或UIToolBar
创建自定义控件。
答案 2 :(得分:0)
除了@ PGDev的回答之外,为了访问可选的值(如果它有一个),你需要打开它。可以安全地或强制地打开可选值。如果您强制解包一个可选项,并且它没有值,则程序将因上述消息而崩溃。 Source.您永远不应该明确强制使用!
运算符展开可选项。可能存在使用!
是可接受的情况 - 但如果您100%确定可选项包含值,则应该只使用它。
此外,UITabBar始终显示在屏幕的下边缘,并显示一个或多个UITabBarItem个对象的内容。但我找到了一些相关的答案,可能有助于如何将UITabBar
放在首位。请参阅以下链接。
希望这有帮助!