locationManager.location возвращает ноль - PullRequest
0 голосов
/ 27 января 2019

Я использую swift4.2 и Xcode 10, и я пытаюсь заставить iOS приложение использовать службу определения местоположения, и это дает мне исключение:
Fatal error: Unexpectedly found nil while unwrapping an Optional value

, поэтому я попытался проверить, возвращает ли местоположение ноль, поэтому я скопировал свой код и напечатал местоположение, и оно возвращает null, я смоделировал местоположение в Xcode из product > схема > изменить схему > местоположение по умолчанию и проверить местоположение в области отладки и смоделировать местоположение, я выберу любой знает проблему?

import CoreLocation

class LocationVC: UIViewController,CLLocationManagerDelegate {

    let locationManager = CLLocationManager()
    var currentlocation:CLLocation!

    override func viewDidLoad() {
        super.viewDidLoad()
        locationManager.delegate = self
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.requestWhenInUseAuthorization()
        locationManager.startMonitoringSignificantLocationChanges()
   }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        authorizelocationstates()
    }

    func authorizelocationstates(){
        if CLLocationManager.authorizationStatus() == .authorizedWhenInUse {
            currentlocation = locationManager.location
            print(currentlocation)
        }
        else{
            locationManager.requestWhenInUseAuthorization()
            authorizelocationstates()
        }
        }

1 Ответ

0 голосов
/ 27 января 2019

Я запустил ваш код и только что добавил отсутствующий ключ Конфиденциальность - расположение при использовании Описание использования в info.plist файле.

И я внес некоторые изменения в ваш код и получил значение nil, потому что метод вызывается несколько раз, и когда пользователь дает разрешение, и метод вызывается снова, и я собираюсь напечатать сведения о местоположении, но факт все равно locationManagerпеременная не имеет данных о местоположении пользователя.

получить сведения о местоположении в locationManager, когда делегат didUpdateLocations вызвал

Я внес в ваш код некоторые изменения:

import UIKit
import CoreLocation
class ViewController: UIViewController,CLLocationManagerDelegate {
    var locationManager = CLLocationManager()
    var currentlocation:CLLocation!



    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
     //   authorizelocationstates()
    }

    func authorizelocationstates(){
        if CLLocationManager.authorizationStatus() == .authorizedWhenInUse {
            currentlocation = locationManager.location
            print(currentlocation)
        }
        else{
            // Note : This function is overlap permission
            //  locationManager.requestWhenInUseAuthorization()
           //  authorizelocationstates()
        }
    }
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        locationManager = manager
        // Only called when variable have location data
        authorizelocationstates()
    }
    override func viewDidLoad() {
        super.viewDidLoad()

        locationManager.delegate = self
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        // Get Location Permission one time only
        locationManager.requestWhenInUseAuthorization()
        // Need to update location and get location data in locationManager object with delegate
        locationManager.startUpdatingLocation()
        locationManager.startMonitoringSignificantLocationChanges()

    }

}

enter image description here

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...