2017-02-20 3 views
0

Ich habe ein benutzerdefiniertes Plugin für Cordova in Swift erstellt. Generell funktioniert es, da ich mit JavaScript kommunizieren kann. Alles ist in Ordnung, bis ich versuche, eine in einer meiner Klassen definierte Methode aufzurufen. In diesem Moment bekomme ich EXC_BAD_ACCESS Fehler beim Aufruf locationService.authorizeLocationServices Methode.Swift Plugin in Cordova verursacht EXC_BAD_ACCESS

import Foundation 
import CoreLocation 

@objc(DBT) class DBT : CDVPlugin { 
    var locationService: LocationService = LocationService() 

    func authorizeLocationServices(_ command: CDVInvokedUrlCommand) { 
     let delegate = commandDelegate! 

     locationService.authorizeLocationServices(success: { 
      delegate.send(CDVPluginResult(status: CDVCommandStatus_OK, messageAs: "All OK"), callbackId:command.callbackId) 
     }, fail: { 
      delegate.send(CDVPluginResult(status: CDVCommandStatus_ERROR, messageAs: "Not good, not good..."), callbackId:command.callbackId) 
     }) 
    } 
} 

class LocationService : NSObject, CLLocationManagerDelegate { 
    var locationManager = CLLocationManager() 
    var authorizationSuccessCallback: (() ->())? 
    var authorizationFailureCallback: (() ->())? 

    override init() { 
     super.init() 

     locationManager.delegate = self 
    } 

    func authorizeLocationServices(success successCallback: @escaping() ->(), fail failureCallback: @escaping() ->()) { 
     authorizationSuccessCallback = successCallback 
     authorizationFailureCallback = failureCallback 

     if CLLocationManager.authorizationStatus() != CLAuthorizationStatus.authorizedAlways { 
      locationManager.requestAlwaysAuthorization() 
     } else { 
      successCallback() 
     } 
    } 

    func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) { 
     if status == CLAuthorizationStatus.authorizedAlways { 
      if let callback = authorizationSuccessCallback { 
       callback() 
      } 
     } else { 
      if let callback = authorizationFailureCallback { 
       callback() 
      } 
     } 
    } 
} 

Ich habe den Code debuggen, und es sieht aus wie dies durch das locationService Beispiel verursacht wird, aber ich weiß nicht, warum.

Antwort

0

Endlich habe ich mein Problem gelöst. Aus unbekanntem Grund wird locationService nicht instanziiert. Also musste ich es zu einem optionalen Typ machen und es in einer Methode instantiieren. Der folgende Code funktioniert wie erwartet.

Verwandte Themen