[iOS8] CoreLocationで位置情報取得のアラートが出ないときの対処法

こんにちは! Objective-CよりSwiftはだいぶ書きやすいですね!storyboardも直感的でとてもいい感じです。

さて、本題ですが、CoreLocationで位置情報を取得しようとしたのですが、なかなか確認のアラートが出てくれない。 色々詰まりに詰まった結果、こうやれば出来たよ!ってのを書きたいと思います。

まずはコードとしてはこんな感じ

import UIKit
import CoreLocation

class ViewController: UIViewController, CLLocationManagerDelegate {
  var locationManager: CLLocationManager!

  override func viewDidLoad() {
    super.viewDidLoad()

    self.locationManager = CLLocationManager()
    self.locationManager.delegate = self

    let status = CLLocationManager.authorizationStatus()

    // 認証が得られていない場合認証ダイアログを表示
    if(status == CLAuthorizationStatus.NotDetermined) {
      self.lm.requestWhenInUseAuthorization()
    }

    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
    self.locationManager.distanceFilter = 300

    self.locationManager.startUpdatingLocation()
  }

  // 位置情報取得成功
  func locationManager(manager: CLLocationManager!, didUpdateToLocation newLocation: CLLocation!, fromLocation oldLocation: CLLocation!) {

    NSLog("緯度:\(newLocation.coordinate.latitude) 経度:\(newLocation.coordinate.longitude)")
  }

  // 位置情報取得失敗
  func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) {
    NSLog("\(error)")
  }
}

これでいけるはずなんですが、なぜかいかない。実機テストでも位置情報が取得出来ない。 iOS側で設定しなきゃいけないのか?と思って設定から位置情報をオンにしても動かない。 なぜだーーー!と思って検索してたら、iOS8からはinfo.plistに使う理由を書かないとダメだよ!っていうstackoverflowを見つけました!

Location Services not working in iOS 8

ということで、info.plistを開いて言われた通りに書きましょう。

NSLocationWhenInUseUsageDescription
このアプリは位置情報を使ったアプリです
NSLocationAlwaysUsageDescription
このアプリは位置情報を常に使うアプリです

先ほどのコードの場合だとNSLocationWhenInUseUsageDescriptionだけで十分ぽいですが、ついでなので両方追加しておきました! これで動いた!!

少しでも約に立てれればFacebookページにいいねしていただけると嬉しいです!!

詳解 Swift
posted with amazlet at 14.12.07
荻原 剛志
SBクリエイティブ
売り上げランキング: 1,523