0
我在Swift中为Cordova创建了一个自定义插件。一般来说它是“工作”的,因为我可以通过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
情况下造成的,但我不知道为什么。