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.