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

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

ただいまの
回答率

90.46%

  • Swift

    8991questions

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

  • Xcode

    5064questions

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

  • iOS

    4802questions

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

  • Google マップ

    433questions

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

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

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,591

ke-ki

score 3

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

前提・実現したいこと

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

発生している問題・エラーメッセージ

consoleに nowgps=nil 緯度=35.6585 経度=139.7013

と出力されます。

ソースコード

import CoreLocation

final class LocationManager: NSObject, CLLocationManagerDelegate {

   private var locationManager_: CLLocationManager

   private var currentLocation: CLLocation!

    struct Singleton {
        static let sharedInstance = LocationManager()
    }

    class var sharedInstance: LocationManager {
        return Singleton.sharedInstance
    }

    override init() {
    // locationManageの設定
    locationManager_=CLLocationManager()
    locationManager_.desiredAccuracy = kCLLocationAccuracyBest
    locationManager_.distanceFilter = 10
    super.init()
    locationManager_.delegate = self
    // 位置情報のアクセス許可の状況に応じて、アクセス許可の取得、位置情報取得の開始を行う
    let status = CLLocationManager.authorizationStatus()
    switch status{
    case .Restricted, .Denied:
    break
    case .NotDetermined:
    // iOS8ではアクセス許可のリクエストをする。iOS7では位置情報取得処理を開始することでアクセス許可のリクエストをする
    if locationManager_.respondsToSelector("requestWhenInUseAuthorization"){
    locationManager_.requestWhenInUseAuthorization()
    }else{
          locationManager_.startUpdatingLocation()
    }
    case .AuthorizedWhenInUse, .AuthorizedAlways:
    locationManager_.startUpdatingLocation()
    default:
    break
    }

    }


    // 位置情報取得開始
    func startUpdatingLocation() {
        self.locationManager_.startUpdatingLocation()
    }


    // 現在地取得
    func getNowLocation() -> CLLocation? {

        var nowgps:CLLocation?
        if self.currentLocation == nil {
            nowgps = nil
            println("nowgps=nil")
        }else{
            nowgps = self.currentLocation!
        }
        return nowgps
    }


    // 位置情報のアクセス許可の状況が変わったときの処理
    func locationManager(manager: CLLocationManager!, didChangeAuthorizationStatus status: CLAuthorizationStatus) {

        switch status{
        case .Restricted, .Denied:
            manager.stopUpdatingLocation()
        case .AuthorizedWhenInUse, .AuthorizedAlways:
            locationManager_.startUpdatingLocation()
        default:
            break
        }
    }

    // 位置情報が取得できたときの処理
    func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {

        if locations.count > 0{
            var location = locations.last as! CLLocation

            self.currentLocation = location

           println("緯度:\(currentLocation.coordinate.latitude) 経度:\(currentLocation.coordinate.longitude)")


        }

    }


}

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

swiftでxcode6.3.1です。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/12/08 17:34

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

    キャンセル

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

  • ただいまの回答率 90.46%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Swift

    8991questions

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

  • Xcode

    5064questions

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

  • iOS

    4802questions

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

  • Google マップ

    433questions

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