MKMapViewの「User Location」にチェックを入れると警告がでる

MkMapViewの「User Location」にチェックを入れると警告がでる

Interface BuilderでMkMapViewの「User Location」にチェックを入れると、

Trying to start MapKit location updates without prompting for location authorization. Must call -[CLLocationManager requestWhenInUseAuthorization] or -[CLLocationManager requestAlwaysAuthorization] first.

という警告(エラー?)が出る場合があります
一応問題なく動くのですが、非常に気持ち悪いです

MkMapViewの「User Location」にチェックを入れると警告がでる

原因はたぶん、

MKMapViewの「User Location」にチェックが入っているので、起動してすぐに位置情報を取得しに行こうとする

「位置情報を使いますか?」というアラート画面をまだ出していない

エラー表示

「位置情報を使いますか?」というアラート画面を表示

という流れなのだと思います

なので、

「位置情報を使いますか?」というアラート画面を表示する

MKMapViewの「User Location」をTrueにする

という順番にすれば、警告はでなくなります

具体的には、Interface BuilderのMkMapViewの「User Location」のチェックを外して、プログラムでtrueにするようにします。trueにするタイミングはMKMapViewのデリーゲートです。位置情報の許可が出てからMKMapViewのshowsUserLocationをtrueにすればOKです

func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
    
    switch status {
    case CLAuthorizationStatus.AuthorizedAlways, CLAuthorizationStatus.AuthorizedWhenInUse:
        mapView.showsUserLocation = true
        break
    }
}
タイトルとURLをコピーしました