0
SwiftのCordova用のカスタムプラグインを作成しました。私はJavaScriptを使ってそれと通信することができるので、一般的には "働いている"と言います。私のクラスの1つで定義されたメソッドを呼び出そうとするまでは、すべて問題ありません。この時点で私はを取得していますlocationService.authorizeLocationServices
メソッドを呼び出すときにEXC_BAD_ACCESSエラーが発生しています。Cordovaの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
インスタンスによって引き起こされるように見えますが、私は理由を知りません。