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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

1回答

1109閲覧

locationManagerで取得したlatitudeの値をviewDidLoad()に出力したい

curh

総合スコア11

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

0クリップ

投稿2018/04/03 10:02

編集2018/04/03 10:21

タイトルの通りです.
Swift3初心者です.

swift3

1private func locationManager(_ manager: CLLocationManager, 2 didUpdateLocations locations: [CLLocation]) -> Double{ 3 let locationData = locations.last 4 if var ido = locationData?.coordinate.latitude{ 5 ido = round(ido*1000000)/1000000 6 return Double(ido) 7 } 8 }

というように定義しており,Double型で緯度の値を返すようにしたのですが,

Swift3

1 class ViewController: UIViewController, ARSCNViewDelegate, CLLocationManagerDelegate{ 2 3 var locationManager = CLLocationManager() 4 var locationData : CLLocation? = nil 5 6 override func viewDidLoad() { 7 super.viewDidLoad() 8 910 11 var ido:Double = 0.0 12 ido = locationManager(locationManager,locationData) //Cannot call value of non-function type 'CLLocationManager'というエラーが出る 13 14 if ido > 35.689634 { 15 1617 18 } 19 } 20}

のため困っております.
そもそも,Double型で値を返すことができないんでしょうか?

また,前回同じような質問内容で投稿させていただき,ベストアンサーの方に教えていただいたようにしたのですが,値がnilとなっており,35.689634の値と比較ができませんでした.
前回の質問内容
その時に教えていただいたコードが以下のようになります

swift3

1import SceneKit 2import ARKit 3import CoreLocation 4import UIKit 5 6class ViewController: UIViewController, ARSCNViewDelegate, CLLocationManagerDelegate{ 7 8 var locationManager = CLLocationManager() 9 var locationData:CLLocation? = nil 10 11 12 func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]){ 13 14 locationData = locations.last 15 ... 16 } 17 18 override func viewDidLoad() { 19 super.viewDidLoad() 20 21 .... 22 if let locationData = locationData, locationData.coordinate.latitude >= 35.689634 { 23     //この時のlocationData.coodinate.latitudeの値がnilとなっている 24 scene.rootNode.addChildNode(sphere3Node) 25 } 26 } 27}

よろしくおねがいいたします.

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

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

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

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

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

guest

回答1

0

言葉足らずで申し訳ございませんでした。
前回の回答はあくまで参照エラーを解決をするための回答です。
※上記の実装はあくまでダミーで、他の箇所で保存している値があってそこから値を取得してくるのかと思っていました。
viewDidLoadの段階ですと、didUpdateLocationsがまだ発生していないために値を取得することができません。(viewDidLoadとdidUpdateLocationsの両方でprint("a")、print("a")などで値が出力される順番を見てみてください。)

投稿2018/04/03 11:13

newmt

総合スコア1277

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

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

curh

2018/04/03 12:27

前回はありがとうございました.私の理解力不足,説明不足のためお手を煩わせてしまい申し訳在りません. viewDidLoadが実行される前にロケーションの更新が開始されてないため,locationDataの配列がnilのまま呼び出されているということでしょうか? すなわち, locationManager.startUpdatingLocation()があるlocationManagerをviewDidLoad前に持ってたら良いということでしょうか? 初心者ゆえ突拍子もない解釈をしていたら申し訳在りません
curh

2018/04/03 12:37

viewDidLoadは起動し,画面を表示する時に発生すると思いますが,それより先に位置情報を取得することは可能なんでしょうか? 回答いただいてから調べてみたのですが,どうすれば先にdidUpdateLocationsを呼び出せるのかいまいちピンときません…すみません,よろしくおねがいいたします.
newmt

2018/04/03 12:39

私の説明が周りくどくわかりづらくて申し訳ございません。 viewDidLoadより前にdidUpdateLocationsを呼び出すことはできません。
curh

2018/04/03 12:47

それだと,locationManagerで取得したlatitudeの値をviewDidLoadに呼び出すことは不可能ということでしょうか?
newmt

2018/04/03 23:10

didUpdateLocationsで値を取得してから再度ViewDidLoadを呼び出すということはできません。 どういう処理をされたいのかがいまいちわかってはいないのですが、例えば 一度画面を表示してdidUpdateLocationsで値を取得したものをUserDefaultsや画面外で管理している変数などに保存しておき、 再び画面に戻ってきた際にviewWillAppear(これは画面に来るたびに毎回呼ばれます。)のタイミングで保存しておいた値を取得して比較をするなどはできると思います。 UserDefaultsについて https://i-app-tec.com/ios/nsuserdefaults.html
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問