Я создал пользовательский плагин для Кордовы в Свифт. Вообще говоря, это «работает», так как я могу общаться с ним через JavaScript. Все нормально, пока я не попытаюсь вызвать метод, определенный в одном из моих классов. В данный момент я получаю сообщение EXC_BAD_ACCESS ошибка при вызове метода locationService.authorizeLocationServices
.Swift плагин в Кордове, вызывающий 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()
}
}
}
}
Я отлажена код, и выглядит это вызвано, например locationService
, но я не знаю, почему.