不使用CLLocationManager显示当前位置

时间:2015-05-26 18:03:58

标签: swift annotations currentlocation mkuserlocation

我是iOS新手,我对查找当前用户位置有疑问。我正在阅读Apple文档:

  

在地图地图套件中显示用户的当前位置包括   内置支持显示用户的当前位置   地图。要显示此位置,请设置您的showsUserLocation属性   将视图对象映射到YES。这样做会导致地图视图使用Core   找到用户位置的位置并添加类型注释   MKUserLocation到地图。

     

将MKUserLocation注释对象添加到地图中   委托人以与自定义注释相同的方式报告。   如果要将自定义注释视图与用户关联   您应该从您的委托对象返回该视图   mapView:viewForAnnotation:方法。如果要使用默认值   注释视图,从该方法返回nil。要了解更多信息   向地图添加注释,请参阅注释地图。

这听起来很棒。但是......然后......

import UIKit
import MapKit

class ViewController: UIViewController {

    @IBOutlet weak var mapView: MKMapView!

    override func viewDidLoad() {
        super.viewDidLoad()

        //set initial location in Honolulu
        //let initialLocation = CLLocation(latitude: 21.282778, longitude: -157.829444)

        mapView.showsUserLocation = true
        let initialLocation = mapView.userLocation.location

        centerMapOnLocation(initialLocation)

        //        let artwork = Artwork(title: "King David Kalakaua", locationName: "Waikiki Gateway Park", discipline: "Sculpture", coordinate: CLLocationCoordinate2D(latitude: 21.283921, longitude: -157.831661))

        //        mapView.addAnnotation(artwork)
        //
        //        mapView.delegate = self
    }

    let regionRadius: CLLocationDistance = 1000
    func centerMapOnLocation(location: CLLocation){
        let coordinateRegion = MKCoordinateRegionMakeWithDistance(location.coordinate, regionRadius * 2.0, regionRadius * 2.0)
        mapView.setRegion(coordinateRegion,animated:true)
    }
}

我有fatal error: unexpectedly found nil while unwrapping an Optional value。我不明白为什么。如果我手动设置位置 - 当然没关系。但是在文档中写道,它将在地图上添加注释。没有添加注释,它会崩溃。是否可以在不使用CLLocationManager的情况下获取用户坐标?

1 个答案:

答案 0 :(得分:1)

您是否已向用户请求权限以让您的应用使用位置服务? Apple的文档可以帮助您解决这个问题。请看下面的示例代码,以帮助您入门:

private func beginLocationUpdates() {
    // Request location access permission
    _locationManager!.requestWhenInUseAuthorization()

    // Start observing location
    _locationManager!.startUpdatingLocation()
}