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

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++と共存することが意図されています

Google マップ

Google Mapは、Google社がオンラインで提供している地図・ローカル検索サービスです。GIS(Geographic Information System:地理情報システム)の中の「WebGIS」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。

Q&A

1回答

3798閲覧

位置情報のデータを取得、変数に格納したい

ke-ki

総合スコア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++と共存することが意図されています

Google マップ

Google Mapは、Google社がオンラインで提供している地図・ローカル検索サービスです。GIS(Geographic Information System:地理情報システム)の中の「WebGIS」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。

0グッド

0クリップ

投稿2015/12/07 07:19

すみません。初心者です。どなたか、わかる方がいらっしゃいましたらご回答宜しくお願い致します。

###前提・実現したいこと
位置情報をviewControllerで使いたいので、位置情報関係のメゾットなどをまとめたLocationManager.Swiftファイルを作りました。getNowLocation() でnowgpsを取得したいのですが、
nowgps=nilになってしまいます。しかし、その後の緯度経度は出力されてます。nowgpsにデータがほしいです。環境はsimulatorで違うコードの時は動いていたので、デバイスの問題ではないと思います。

###発生している問題・エラーメッセージ
consoleに
nowgps=nil
緯度=35.6585 経度=139.7013

と出力されます。

###ソースコード

swift

1import CoreLocation 2 3final class LocationManager: NSObject, CLLocationManagerDelegate { 4 5 private var locationManager_: CLLocationManager 6 7 private var currentLocation: CLLocation! 8 9 struct Singleton { 10 static let sharedInstance = LocationManager() 11 } 12 13 class var sharedInstance: LocationManager { 14 return Singleton.sharedInstance 15 } 16 17 override init() { 18 // locationManageの設定 19 locationManager_=CLLocationManager() 20 locationManager_.desiredAccuracy = kCLLocationAccuracyBest 21 locationManager_.distanceFilter = 10 22 super.init() 23 locationManager_.delegate = self 24 // 位置情報のアクセス許可の状況に応じて、アクセス許可の取得、位置情報取得の開始を行う 25 let status = CLLocationManager.authorizationStatus() 26 switch status{ 27 case .Restricted, .Denied: 28 break 29 case .NotDetermined: 30 // iOS8ではアクセス許可のリクエストをする。iOS7では位置情報取得処理を開始することでアクセス許可のリクエストをする 31 if locationManager_.respondsToSelector("requestWhenInUseAuthorization"){ 32 locationManager_.requestWhenInUseAuthorization() 33 }else{ 34 locationManager_.startUpdatingLocation() 35 } 36 case .AuthorizedWhenInUse, .AuthorizedAlways: 37 locationManager_.startUpdatingLocation() 38 default: 39 break 40 } 41 42 } 43 44 45 // 位置情報取得開始 46 func startUpdatingLocation() { 47 self.locationManager_.startUpdatingLocation() 48 } 49 50 51 // 現在地取得 52 func getNowLocation() -> CLLocation? { 53 54 var nowgps:CLLocation? 55 if self.currentLocation == nil { 56 nowgps = nil 57 println("nowgps=nil") 58 }else{ 59 nowgps = self.currentLocation! 60 } 61 return nowgps 62 } 63 64 65 // 位置情報のアクセス許可の状況が変わったときの処理 66 func locationManager(manager: CLLocationManager!, didChangeAuthorizationStatus status: CLAuthorizationStatus) { 67 68 switch status{ 69 case .Restricted, .Denied: 70 manager.stopUpdatingLocation() 71 case .AuthorizedWhenInUse, .AuthorizedAlways: 72 locationManager_.startUpdatingLocation() 73 default: 74 break 75 } 76 } 77 78 // 位置情報が取得できたときの処理 79 func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) { 80 81 if locations.count > 0{ 82 var location = locations.last as! CLLocation 83 84 self.currentLocation = location 85 86 println("緯度:\(currentLocation.coordinate.latitude) 経度:\(currentLocation.coordinate.longitude)") 87 88 89 } 90 91 } 92 93 94} 95 96

###補足情報(言語/FW/ツール等のバージョンなど)

swiftでxcode6.3.1です。

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

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

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

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

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

guest

回答1

0

【iOS Swift入門 #172】現在地の位置情報を取得する (サンプルあり)

多分こちらのサンプルを改良されたと思いますが、位置情報の取得のDelegateメソッドは位置情報が取得された時に呼び出されますので、こちらのLocationManagerを生成してgetNowLocation()を呼んでも位置情報はまだ取得出来ていないと思います。

上記のサンプルの様にViewControllerで処理していれば、取得できたタイミングをとるのは簡単ですが、別のクラスに分けてやるのであれば、位置情報が取得成功 or 位置情報が取得失敗のタイミングでViewControllerに通知もしくはDelegate等何かしらの手段で知らせる様にしないとちゃんとしたタイミングは分からないです。

投稿2015/12/07 15:46

_Kentarou

総合スコア8490

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

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

ke-ki

2015/12/08 08:34

ありがとうございます。将来的には別のクラスに分けてやろうと思っていましたので、そのようにしていきます。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問