2016-07-10 18 views
1

Swiftでユーザーの経度と緯度を取得しようとしているうちに、問題が発生しました。私はユーザーの座標を取得するための関数を実行するボタンを持っています。最初に押されたときに、アプリにあなたの場所を与える許可を求める必要があります。しかし、私が抱えている問題は、場所の取得ボタンを押すとすぐにこのポップアップが自動的に閉じるということです。ここでSwift:位置情報のポップアップが閉じたままになる

は何が起こるかです:ここではhttp://imgur.com/a/0wdnm

は私のコードです:

class location: NSObject, CLLocationManagerDelegate { 
var locationManager = CLLocationManager() 

internal func getLocation() { 
    locationManager.delegate = self 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest 

    if CLLocationManager.authorizationStatus() == .AuthorizedAlways { 
     locationManager.startUpdatingLocation() 
    } else if CLLocationManager.authorizationStatus() == .NotDetermined { 
     locationManager.requestAlwaysAuthorization() 
    } else if CLLocationManager.authorizationStatus() == .Denied { 
     print("User denied location permissions.") 
    } 
} 


// MARK : CLLocationManagerDelegate protocol 
@objc 
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
    let location: CLLocationCoordinate2D = (locationManager.location?.coordinate)! 
    print(location.latitude) 
    print(location.longitude) 
    } 
} 
+1

あなたの 'location'クラスインスタンスをどこに割り当てるのかを示してください。それはリリースされているように聞こえますが、それはあなたのアプリの持続時間の間に残るべきです。あなたはそれをシングルトンにすることを検討すべきです – Paulw11

+0

私はあなたを愛しています、@ Paulw11 – inigo333

答えて

0

ここで私の作品にいくつかのコードです。メモを取るべきもの:

  1. 実際に使用する必要がある場合は、CLLocationManagerを作成してください。ユーザーがCoreLocationを有効にしていない場合は、ロケーションマネージャが作成されたときにアラートが表示されます(アプリが起動したときなど)。
  2. requestAlwaysAuthorizationは、Info.plistに[NSLocationAlwaysUsageDescription][1]というエントリが必要です。
  3. locationManager:didChangeAuthorizationStatus:を観察し、サービスが利用できなくなった場合はロケーションマネージャを停止します。

コード:

import UIKit 
import CoreLocation 

class LocationViewController: UIViewController, CLLocationManagerDelegate { 

    var locationManager: CLLocationManager? 

    internal func getLocation() { 

     if locationManager == nil { 

      locationManager = CLLocationManager() 
      locationManager?.delegate = self 
      locationManager?.desiredAccuracy = kCLLocationAccuracyBest 
     } 

     if CLLocationManager.authorizationStatus() == .AuthorizedAlways { 
      locationManager?.startUpdatingLocation() 
     } else if CLLocationManager.authorizationStatus() == .NotDetermined { 
      locationManager?.requestAlwaysAuthorization() 
     } else if CLLocationManager.authorizationStatus() == .Denied { 
      print("User denied location permissions.") 
     } 
    } 


    // MARK : CLLocationManagerDelegate protocol 

    func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) { 

     switch status { 

     case .AuthorizedAlways, .AuthorizedWhenInUse: 
      locationManager?.startUpdatingLocation() 

     default: 
      locationManager?.stopUpdatingLocation() 
     } 
    } 

    @objc func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 

     guard let location = locationManager?.location?.coordinate else { 
      return 
     } 

     print(location.latitude) 
     print(location.longitude) 
    } 
} 

extension LocationViewController { 

    @IBAction internal func buttonTapped(sender: AnyObject) { 

     getLocation() 
    } 
} 
+0

あなたのコードを試しても、私はまだ同じ問題を抱えています。 –

0

場所許可ポップアップがあなたがanymore.Youだけの場所に関連する機能を使い続けるよりも、ユーザーの許可を待つ必要が場所にアクセスしてはいけません表示されます。

関連する問題