мое приложение использует SafariViewController для оплаты через веб-страницу.SafariViewController открывает ссылку с платным веб-виджетом.После завершения транзакции пользователь автоматически перенаправляется в приложение через приложение метода экземпляра (_: open: options :) из uiapplicationdelegate.Мы обнаружили, что случайным образом вызывается приложение метода (_: open: options :), когда SafariViewcontroller выполняется, и никто его не вызывает, а URL-адрес - это прошедшая и завершенная транзакция.Подробно вот несколько фрагментов кода.
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
if (url.scheme == "myAppTest") {
NotificationCenter.default.post(name: Notification.Name("CallbackNotification"), object: url)
return true
}
return true
}
В ViewController SafariViewController вызывается так:
NotificationCenter.default.addObserver(self, selector: #selector(safariPay(_:)), name: Notification.Name("CallbackNotification"), object: nil)
self.safariVC = SFSafariViewController(url: URL(string: authURL)!)
safariVC.delegate = self
self.present(safariVC, animated: true, completion: nil)
Очевидно, что методы для удаления наблюдения из NotificationCenter были вставлены.
func safariViewControllerDidFinish(_ controller: SFSafariViewController) {
NotificationCenter.default.removeObserver(self, name: Notification.Name("CallbackNotification"), object: nil)
}
Я хотел бы понять, если это проблема на стороне кода, то есть если какой-то элемент управления отсутствует или SafariViewController хранит что-то в памяти, что может вызвать эту ошибку.