Сбой моего приложения для iOS за пределами Индии при получении текущего местоположения - PullRequest
0 голосов
/ 22 октября 2019

В моем приложении мы получаем текущее местоположение, которое мы используем "CLLocationManager ()", и отображаем его с помощью GMSMapView. Приложение отлично работает в Индии, но если мы запускаем приложение за пределами Индии, я получаю следующий журнал аварий:

Crashed: com.apple.main-thread
EXC_BREAKPOINT 0x0000000100188920
0
DigsFact
DFSelectAddressViewController.swift - Line 200
closure #1 in DFSelectAddressViewController.showCurrentLocation() + 200
1
DigsFact
<compiler-generated> - Line 0
thunk for @escaping @callee_guaranteed (@guaranteed [CLPlacemark]?, @guaranteed Error?) -> ()
2
CoreLocation
CLClientCreateIso6709Notation + 35232
3
LocationSupport
CLWriteStackshot + 6344
4
libdispatch.dylib
_dispatch_call_block_and_release + 32
5
libdispatch.dylib
_dispatch_client_callout + 20
6
libdispatch.dylib
_dispatch_main_queue_callback_4CF + 968
7
CoreFoundation
__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 16
8
CoreFoundation
__CFRunLoopRun + 1980
9
CoreFoundation
CFRunLoopRunSpecific + 480
10
GraphicsServices
GSEventRunModal + 108
11
UIKitCore
UIApplicationMain + 1940
12
DigsFact
AppDelegate.swift - Line 25
main + 25
13
libdyld.dylib
start + 4

Код для получения текущего местоположения, как показано ниже:

    func showCurrentLocation(){
        let camera = GMSCameraPosition.camera(withLatitude: (self.locationManager.location?.coordinate.latitude)!, longitude: (self.locationManager.location?.coordinate.longitude)!, zoom: 14.0)
        mapView = GMSMapView.map(withFrame: CGRect(x: 0, y: 105, width: 380, height: 460),camera: camera)

        self.latitude = (self.locationManager.location?.coordinate.latitude)!
        self.longitude = (self.locationManager.location?.coordinate.longitude)!

        let loadlocation = CLLocation(latitude: (self.locationManager.location?.coordinate.latitude)!, longitude: (self.locationManager.location?.coordinate.longitude)!)

        CLGeocoder().reverseGeocodeLocation(loadlocation, completionHandler: {(placemarks, error) -> Void in
            if (error != nil){
                let alertController = UIAlertController(title: DFUIAlertControllerConstants.APP_TITLE, message:
                    DFUIAlertControllerConstants.UI_ALERT_CONTROLLER_FAILED_TO_GET_CURRENT_LOCATION, preferredStyle: .alert)
                alertController.addAction(UIAlertAction(title: DFUIAlertControllerConstants.UI_ALERT_ACTION_DISMISS_TITLE, style: .default))

                self.present(alertController, animated: true, completion: nil)
            }
            else if (placemarks?.count != 0){
                let pm = placemarks?[0] as! CLPlacemark
                self.address = (pm.subLocality)! + "," + (pm.locality)! + "," + (pm.administrativeArea)! + ",\(DFGoogleAPIConstants.CURRENT_ADDRESS_PIN_CODE)" + (pm.postalCode)!
            }
        })

    }

и функция showCurrentLocation ()вызывается из

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

Инициализация менеджера расположений в AppDelegate

let locationManager = CLLocationManager()
locationManager.requestAlwaysAuthorization()
locationManager.requestWhenInUseAuthorization()
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters
//sleep(2)
if CLLocationManager.locationServicesEnabled() {
     locationManager.delegate = self

     if( CLLocationManager.authorizationStatus() == .authorizedWhenInUse ||
                       CLLocationManager.authorizationStatus() ==  .authorizedAlways){
                   locationManager.requestLocation()
                   locationManager.startUpdatingLocation()
                   self.requestLocation = true
                   print("startUpdatingLocation........ ")
     }
}

Используются методы делегата в AppDelegate

func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
      if(status == .authorizedWhenInUse || status == .authorizedAlways) && (self.requestLocation == false){
        manager.requestLocation()
        manager.startUpdatingLocation()
      }
    }

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        print("in didUpdateLocations......\(manager.location)")
        self.currentLocation = manager.location
    }

    func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
        print("Error: \(error)")
    }

Пожалуйста, помогите.

...