ios - CLLocationManager() Location 在模拟器中为 nil

标签 ios swift swift3 ios-simulator cllocationmanager

我尝试获取 latitudelongitude 但位置始终为 nil

class FinalizeOrderController: UIViewController {

    var locManager = CLLocationManager()
    var currentLocation: CLLocation!

    override func viewDidLoad() {
        super.viewDidLoad()
        currentLocation = CLLocation()
        locManager.requestWhenInUseAuthorization()

        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func FinaliseOrder(_ sender: Any) {
        if (CLLocationManager.authorizationStatus() == CLAuthorizationStatus.authorizedWhenInUse ||
            CLLocationManager.authorizationStatus() == CLAuthorizationStatus.authorizedAlways) {
            currentLocation = locManager.location
            print(locManager.location?.coordinate.latitude) //prints nil
            print(currentLocation.coordinate.longitude) //fatal error: unexpectedly found nil while unwrapping an Optional value
        }


        lbl1.text = "\(currentLocation.coordinate.longitude)"
        lbl2.text = "\(currentLocation.coordinate.latitude)"
    }

我添加 info.plist 键并从 Xcode 运行模拟器位置并从调试中选择模拟器位置但总是不行 nil

最佳答案

试试这个:

var locationManager: CLLocationManager?
var currentLocation:CLLocation?

符合委托(delegate)

class ViewController: UIViewController,CLLocationManagerDelegate

在 ViewDidLoad 中

 override func viewDidLoad() {

        super.viewDidLoad()
        locationManager = CLLocationManager();
        locationManager.delegate = self;
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        let authorizationStatus = CLLocationManager.authorizationStatus()

        if (authorizationStatus == CLAuthorizationStatus.NotDetermined) {
            locationManager.requestWhenInUseAuthorization()
        } else {
            locationManager.startUpdatingLocation()
        }
    }

在委托(delegate)中

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
     currentLocation = locations[locations.count-1] as CLLocation

    print("locations = \(currentLocation)")
   // lbl1.text = "\(currentLocation.coordinate.latitude)";
   // lbl2.text = "\(currentLocation.coordinate.longitude)";
}

在按钮操作中

@IBAction func FinaliseOrder(_ sender: Any) {

        lbl1.text = "\(currentLocation.coordinate.longitude)"
        lbl2.text = "\(currentLocation.coordinate.latitude)"
}

关于ios - CLLocationManager() Location 在模拟器中为 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45010280/

相关文章:

ios - 如何将 NSDictionary 数据绑定(bind)到 objective-c 中的 TableView ?

ios - JPEG2000 和 UIImage

ios - 如何使用 Alamofire? (设计模式)

iphone - CGFloat的乘除法和精度损失

ios - 如何使用 ACEDrawingView 添加清除按钮

swift - 在应用程序被杀死后请求使用通过 UIImagePickerController 选取的视频文件的权限

http - swift NSURLConnectction 不工作

ios - 在 iOS 中使用 Firebase 的云函数

ios - UIViewControllerAnimatedTransitioning 未触发

string - 快速将字符串转换为二进制?