質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Delegates

Delegatesとは、オブジェクト指向型プログラミングにおいて、あるオブジェクトの操作を一部の他のオブジェクトに代替させる手法のこと。オブジェクトは他のデリゲートに頼って関数を実行することができます。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

4492閲覧

locationManager(_:didUpdateLocations:)はいつ呼ばれるのでしょうか?

grapefruit

総合スコア33

Delegates

Delegatesとは、オブジェクト指向型プログラミングにおいて、あるオブジェクトの操作を一部の他のオブジェクトに代替させる手法のこと。オブジェクトは他のデリゲートに頼って関数を実行することができます。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2017/03/09 06:05

###前提・実現したいこと
端末から位置情報を取得するアプリを作っていますが、
実機テストで一つ気になったことがありまして、
タイトル通りlocationManager(_:didUpdateLocations:)
はいつ呼ばれるのでしょうか?
###試したこと
調べたところ、位置情報が変化するたびに呼ばれると書いてあったのですが、実際実機テストでも、シミュレータでも、緯度経度が変わってなくても、locationManagerが呼ばれてることを確認できましたので、
どういう時に呼ばれているのでしょうか?

###該当のソースコードの一部

swift

1 func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 2 3 guard let newLocation = locations.last, 4 ....(以下略)... 5 6

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuzzball

2017/03/10 03:52

精度を高くしているとわずかな移動でも更新されるかも知れません。設定を教えて下さい。
grapefruit

2017/03/10 08:58 編集

設定はしていませんですが、緯度経度は小数点4桁で出力してたので。多分それが問題かと思います。
guest

回答1

0

ベストアンサー

distanceFilterのデフォルト値がkCLDistanceFilterNone`なので、わずかな動きでも位置情報が更新されている可能性があります。

希望する更新頻度(距離)を設定してみてはどうでしょうか?

投稿2017/03/10 09:44

fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

grapefruit

2017/03/12 13:12

回答ありがとうございます! もしも、更新する頻度を時間で設定したい場合、それは可能でしょうか?
fuzzball

2017/03/12 17:07

それは、一定時間ごとに取得すればいいだけの話では?
grapefruit

2017/03/24 04:33

どのように一定時間に取得すればいいのでしょうか? 具体的にどこで時間を指定するのですか?
grapefruit

2017/03/24 04:38

startUpdatingLocationメソッドを一定時間に呼ぶとかですか?
fuzzball

2017/03/24 05:28

例えばTimerを使うことで一定時間ごとに処理を行えます。 https://developer.apple.com/reference/foundation/timer (「Timer」ではなく「NSTimer」で検索した方が情報が見つかりやすいと思います) 位置情報の方は今まで通りに動かしておいて、location​Manager(_:​did​Update​Locations:​)で取得した最新の位置情報をどこかで保存しておきます。 で、Timerなどによって一定時間ごとに保存しておいた位置情報を取得します。これで「一定時間ごとに最新の位置情報を取得」することが出来ます。
grapefruit

2017/03/24 06:16

言ってること理解できました、だが、位置情報が変わる限り、location​Manager(_:​did​Update​Locations:​)はずっと実行されるじゃないですか? どこでnstimerで位置情報を取得するんですか?
fuzzball

2017/03/24 06:24

質問の意味がイマイチ分かりませんが、「Timerで一定時間ごとに実行される処理の中で」ということでよろしかったでしょうか?(コンビニ店員風)
grapefruit

2017/03/24 08:53

質問の言い方が分かりにくてごめんなさいorz やりたいこと→一定時間(1秒間)で緯度経度を取得したい 分からないこと→ locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])は、位置情報が変わると、呼ばれるものだと理解しています。 そこで、もしタイマーをこのメソッドの中に設置したら、位置情報が変わるたびに、タイマーが実行されることになる、そうすると、1秒ごとに取得するのではなく、メソッドが呼ばれるタイミングによって1秒ごとに位置情報をとることになる、と自分が考えてて、そうすると、タイマーをどこに設置すればいいかが分からなくなってきました。 もし、上述の理解が完全に間違っているならば、ご指摘お願いしますorz
fuzzball

2017/03/24 09:16

>>もしタイマーをこのメソッドの中に設置したら これは間違っています。 タイマーは「最初」に一度設定するだけです。あとは1秒間隔で繰り返し処理を行います。 「最初」というのは、例えばViewControllerのviewDidLoad()などです。 (LocationManagerと同じライフサイクルでいいと思いますが)
grapefruit

2017/04/02 10:32

返信が遅くなりましてごめんなさい。 fuzzballさんの言う通りにタイマーの位置を変えてみたら、うまくいきました!! ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問