0

CoreLocation (許可が付与されたら) を使用してユーザーの CLLocationCoordinate2D を取得しようとしているため、その情報を Uber ディープリンクに渡すことができます (TableView 内の UIButton が押された後)。

座標を CLLocations として取得し、didUpdateLocations メソッドで CLLocationCoordinates2D に変換する方法を見つけましたが、それらを buttonPressed 関数に転送できないようです。

座標情報を uberButtonPressed メソッドに適切に転送する方法を誰か説明できますか? また、適切な場所が決定されたら、locationManager に場所の更新を停止させる方法についても混乱しています。どんな助けでも大歓迎です。ところで、私はこれを使って Uber をインスタンス化しています: https://github.com/kirby/uber

import UIKit
import CoreLocation
import MapKit

class ATableViewController: UITableViewController, CLLocationManagerDelegate {
    let locationManager = CLLocationManager()
    var location: CLLocation?
    var coordinate: CLLocationCoordinate2D?

// Implemented tableView methods etc here...

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
    let newLocation = locations.last as! CLLocation
    println("DID UPDATE LOCATIONS \(newLocation)")
    location = newLocation
    coordinate = location!.coordinate
    println("WE HAVE THE COORDINATES \(coordinate!.latitude) and \(coordinate!.longitude)") // this prints along with DID UPDATE LOCATIONS        
}

func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) {
    println("error:" + error.localizedDescription)
}
    func uberButtonPressed(sender: UIButton!) {
        let senderButton = sender
        println(senderButton.tag)

        let authStatus: CLAuthorizationStatus = CLLocationManager.authorizationStatus()

        if authStatus == .NotDetermined {
            locationManager.requestWhenInUseAuthorization()
            return
        }
        if CLLocationManager.locationServicesEnabled() {
        locationManager.delegate = self
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.startUpdatingLocation()
        }


        var pickupLocation = coordinate! // fatal error: unexpectedly found nil while unwrapping an Optional value

        println(pickupLocation)

//            // Create an Uber instance
//            var uber = Uber(pickupLocation: pickupLocation)
//        
               // Set a few optional properties
//            uber.pickupNickname = "OK"
//        
//            uber.dropoffLocation = CLLocationCoordinate2D(latitude: 47.591351, longitude: -122.332271)
//            uber.dropoffNickname = "whatever"
//            
//            // Let's do it!
//            uber.deepLink()
//            
}
4

3 に答える 3

1

私も同じ問題を抱えていました。

次のようにデリゲート メソッドを呼び出す代わりに:

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
    debugPrint("NOT CALLED-- didUpdateLocations AnyObject")    
}

私は次のように変更しました:

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    debugPrint("CALLED-- didUpdateLocations CLLocation")
}
于 2016-12-28T16:16:26.437 に答える
0

問題は、でcoordinateあるをアンラップしていることです。座標は. 特に位置情報サービスが開始される前は、座標と位置が nil である可能性があります。を使用して座標と位置が nil でない場合にのみ の残りを実行し、その場合は を呼び出します。CLLocationCoordinate2D?!CLLocation?uberButtonPressed:if let currentCoordinate = coordinate?locationManager.stopUpdatingLocation()

于 2015-04-22T21:01:30.417 に答える