Безопасно пройти uinavigationController в Swift, не вызывая расы данныхIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Безопасно пройти uinavigationController в Swift, не вызывая расы данных

Сообщение Anonymous »

Я интегрирую нативный модуль iOS с Flutter с помощью Swift. Я пытаюсь получить UinavigationController из контроллера вида корня, а затем передать его вместе с FlutterMethodcall и FlutterResult к обработчику. Тем не менее, я получаю предупреждения о потенциальных гонках данных при прохождении вызова, результата и навигации по обработчику завершения Async Dispatchqueue.main.async Block. < /P>
Вот упрощенная версия моего кода: < /p>

Код: Выделить всё

private func initialize(
_ call: FlutterMethodCall,
result: @escaping FlutterResult
) {
getNavigationControllerLegacy(call: call, result: result) { methodCall, flutterResult, navigation in
guard let nav = navigation else {
flutterResult(FlutterError(code: "NO_NAV", message: "Navigation controller not found", details: nil))
return
}
let liveness = Liveness(methodCall, result: flutterResult)
liveness.viewController = nav
liveness.execute()
}
}

private func getNavigationControllerLegacy(
call: FlutterMethodCall,
result: @escaping FlutterResult,
completion: @escaping @Sendable (FlutterMethodCall, @escaping FlutterResult, UINavigationController?) -> Void
) {
DispatchQueue.main.async {
guard let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene,
let window = windowScene.windows.first,
let rootViewController = window.rootViewController else {
completion(call, result, nil)
return
}

var navigationController: UINavigationController?

if let window = UIApplication.shared.windows.first(where: { $0.isKeyWindow }),
let rootViewController = window.rootViewController {
if let nav = rootViewController as? UINavigationController {
navigationController = nav
} else if let nav = rootViewController.navigationController {
navigationController = nav
}
}

completion(call, result, navigationController)
}
}
Какой правильный способ передать uinavigationController без риска раст данных или неопределенного поведения?

Подробнее здесь: https://stackoverflow.com/questions/796 ... data-races
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»