2016-08-12 11 views
0

緯度と経度の座標をFirebaseに保存したいのですが、このコードでアプリケーションを実行するたびにクラッシュします。座標をFirebase Swift 2に保存する方法

let userID: String = (FIRAuth.auth()?.currentUser?.uid)! 
let lat: Double = (locationManager.location?.coordinate.latitude)! 
let lon: Double = (locationManager.location?.coordinate.longitude)! 

self.ref.child("Location").child(userID).setValue(["Latitude": lat, "Longitude": lon]) 

これを修正して適切かつ効率的に保存できますか?

+0

あなたはクラッシュのどのような種類を得るのですか? コードの最初の3行で割り当ての右側のどこかにnilがありますか?ラップ解除演算子があり、ラップ解除された値がゼロであれば実行時にクラッシュする可能性があります。 –

+0

コア位置デリゲートメソッドが呼び出されていますか? – Dravidian

+0

@Dravidianうん、彼らは呼ばれている。しかし、私のアプリケーションがクラッシュし、let変数latを作成するとすぐに停止することがわかります。 –

答えて

1

二つのことを確認します -

1)あなたのViewControllerがCLLocationManagerDelegateから継承し、viewDidLoad

2で自己へのdelegateセットがあります)あなたのinfo.plistが追加さこれらのキーを持っている: -

NSLocationAlwaysUsageDescription ---私は場所

がNSLocationWhenInUseUsageDescription ---私は場所

01を必要とする必要があります

プライバシー - 場所使用法の説明---私は場所を必要とする

class MapViewController: UIViewController , CLLocationManagerDelegate...{ 

... 
.. 

let locationManager = CLLocationManager() 

func viewDidLoad(){ 
    super.viewDidLoad() 

    locationManager.delegate = self 

    locationManager.desiredAccuracy = kCLLocationAccuracyBest 
    locationManager.distanceFilter = kCLDistanceFilterNone 
    locationManager.requestWhenInUseAuthorization() 
    locationManager.startMonitoringSignificantLocationChanges() 
    locationManager.startUpdatingLocation() 

    } 

//Call these functions for updating the getting the values of current location 


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


    if status == .AuthorizedWhenInUse { 


     print("authorised call came . . . . ") 
     mapView.myLocationEnabled = true 

    } 
} 




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

    if let location = locations.first { 

    print("target position : = \(location.coordinate)") 
    print(locationManager.location!.coordinate.latitude) 
    mapView.camera = GMSCameraPosition(target: location.coordinate, zoom: 15, bearing: 0, viewingAngle: 0) 
    locationManager.stopUpdatingLocation() 
    self.FIRDatabase.database().reference().child("Location").child(FIRAuth.auth()!.currentUser!.uid).setValue(["Latitude": locationManager.location!.coordinate.latitude, "Longitude": locationManager.location!.coordinate.longitude]) 
    } 

} 

} 
関連する問題