2016-05-17 5 views
1

私はLocationManagerの問題をswift 2.0で持っています。その私の場所のクラス:Swift 2.0 LocationManagerはゼロです

*

import Foundation 
import CoreLocation 
class Location : NSObject, CLLocationManagerDelegate { 

    var locationManager: CLLocationManager? 
    var coordinate: CLLocationCoordinate2D? 


    func locationManagerStart() { 

     if locationManager == nil { 

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

     locationManager?.startUpdatingLocation() 

    } 

    func locationManagerStop() { 

     locationManager?.stopUpdatingLocation() 
    } 

    //MARK: CLLocationManagerDelegate 

    func locationManager(manager: CLLocationManager, didUpdateToLocation newLocation: CLLocation, fromLocation oldLocation: CLLocation) { 

     coordinate = newLocation.coordinate 

    } 

*

私はAppDelegateで、このクラスのオブジェクトを作成します。

let location = Location() 

と私のアプリがアクティブになったときの位置を開始します。

func applicationDidBecomeActive(application: UIApplication) { 


     location.locationManagerStart() 

    } 

後で私のコードで私は場所にアクセスできるかどうかを確認する必要があります。

func haveAccessToLocation() -> Bool { 

     if (coordinate?.latitude) != nil { 

      return true 

     }else { 

      return false 
     } 

    } 

マイcordinate?.latitude/longitudeがnilであると、私のlocationManagerがあまりにもnilであると、私はなぜ

+0

これはSimulatorで実行していますか? - 実際のデバイスでテストします。 – Fennec

+0

あなたはUppateToLocationが呼び出されたかどうかを確認しましたか? –

+1

初めてアプリを実行したときに位置を有効にするポップアップを表示していますか? –

答えて

0

を知らないあなたが言った:

私は私がiPhoneで上の場所を持っていると私は私の場所を使用して受け入れたので、私は持っているsuerています私 coordinate?.latitude/longitudenilある

...

locationManagerが0でない場合ですが、coordinateというのは、ロケーションマネージャが場所を取得する前にcoordinateを確認しているということです。数秒かかることがあります。

...私のlocationManagernilです。

あなたはlocationManagerStartと呼ばれていますが、後でlocationManagerをチェックし、それはあなたのコード内でLocation()の2つのインスタンスを持っている可能性があることを意味し、nilだった場合。アプリデリゲートによって作成されたインスタンスを常に参照し、Location()への他の参照を控えてください。

LocationapplicationDidBecomeActiveにインスタンス化すると、特定のケースで複数のインスタンスが発生することもあります(アプリケーションが非アクティブになって再びアクティブになると、再びインスタンス化されるため)。私はdidFinishLaunchingWithOptionsで位置情報サービスを開始することをお勧めします。私はそれがここの問題だとは思わないが、この問題を認識している。

関連する問題