8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CLLocationManagerでdidUpdateLocationが2回呼ばれる現象

Posted at

初投稿になります。
お見苦しい箇所も多々あると思いますがよろしくお願い致します。
###現象
ボタンをタップしたら位置情報を取得して画面遷移を行う機能を実装していました。
画面遷移が完了してから、端末のGPSがオフになる前にBack前画面へ戻り、
同一のボタンをタップすると、didUpdateLocationが2回呼ばれ、一気に2画面遷移をしてしまう事態が発生しました。
###対応

// MARK: - delegate
func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {

    // 位置情報取得後挙動

    // GPSのオフ
    manager.stopUpdateLocation()
    // 以下今回対応箇所
    self.locationManager.delegate = nil
}

// MARK: - プロパティ
let locationManager = CLLocationManager()

位置情報が取得されたタイミングでstopUpdateLocationを呼んでいたのですが、コールバックが2回来るため、delegateに対してnilを入れることで2度目のコールバックが呼ばれる事をブロックしました。
stopUpdateLocationが呼ばれてから端末のGPSがオフになるまでに5~10秒ほど時間がかかっていたので、その間に再度startUpdateLocationが呼ばれることで、コールバックが2回来ていたのではないかと考えています。
###終わりに
私の実装方法が悪かったのか、LocationManagerでは発生しうる可能性の高い現象かはわかりませんが、同じ現象で悩んでいる方のご参考になればと思います。
また同じ現象でもっといい修正方法があればご教授いただければなと思います。

8
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?