EXC_BAD_ACCESS при передаче пустого идентификатора для обратного вызова из Obj-C в Swift - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь отладить проблему, с которой сталкиваюсь в сторонней библиотеке и достигла кирпичной стены.Проблема в том, что я вызываю библиотеку в Swift и передаю ей обратный вызов.Затем библиотека выполняет код Obj-C, который в итоге вызывает обратный вызов с NULL, который необъяснимым образом завершается с EXC_BAD_ACCESS (code=1, address=0x0)

Swift-кодом:

return AWSMobileClient.sharedInstance().interceptApplication(app, didFinishLaunchingWithOptions: opts) { (res: Any?, err: Error?) in
    guard err == nil else {
        Log.e("Error registering with AWS: \(err!.localizedDescription)")
        return
    }
    Log.i("No error registering with AWS")
}

Код Obj-C (упрощенно):

- (BOOL)interceptApplication:(UIApplication *)application
didFinishLaunchingWithOptions:(nullable NSDictionary *)launchOptions
resumeSessionWithCompletionHandler:(void (^)(id result, NSError *error))completionHandler {
    completionHandler(NULL, NULL);      // Crashes here if 1st argument is NULL
    completionHandler(@"hello", NULL);  // Doesn't crash
    return YES;
}

Как видите, я правильно пометил обратный вызов Swift, чтобы он имел тип Any?, поэтому он должен принять NULL/nil без проблем.

Если кто-то может объяснитьпочему это происходит и как это исправить, это было бы замечательно.

...