Swift 4 WebkitView Изменение URL не выполняет свою работу - PullRequest
0 голосов
/ 15 декабря 2018

У меня следующая ситуация.

Я использую WebkitView для отображения некоторой информации о сеансе.В большинстве мест он генерируется, когда ViewController оживает, но у меня есть одно конкретное представление, в котором мне нужно перезагрузить его при взаимодействии пользователей с кнопками, которые меняются на следующий или предыдущий месяц.

У меня есть следующий код:

// This is my connection to the storyboard element
@IBOutlet weak var areaNotasMes: WKWebView!

После этого у меня есть функция, которая выполняет обработку URL:

func actualizarUrlNotasMes(fechaNueva: Date) {
    let formateadorAdicional = DateFormatter()
    formateadorAdicional.dateFormat = "yyyyMM"

    let url = URL(string: "https://myurl/\(formateadorAdicional.string(from: fechaNueva))")

    areaNotasMes.load(URLRequest(url: url!))
}

И у меня есть событие кнопки, которое использует функцию со следующей комбинацией YEAR_MONTH, например так:

@IBAction func mesSigPressed(_ sender: UIButton) {
    // Some more code to get the fechaActual variable
    actualizarUrlNotasMes(fechaNueva: fechaActual)
    // Some more code
}

Итак, в основном происходит загрузка при первом открытии ViewController, но когда я нажимаю кнопку, чтобы перейти к следующему месяцу, дата изменяется, корректно генерируется и передается функции,Он генерирует правильный URL, но когда запускается функция areaNotasMes.load(...), в WebKitView ничего не обновляется.Я попытался добавить areaNotasMes.reload(), но он также ничего не сделал.Нужно ли мне уничтожать и заново создавать WebKitView каждый раз, когда я меняю URL?Или я неправильно обрабатываю изменение URL-адреса?

Кроме того, консоль время от времени выдает некоторые из этих сообщений, но не всегда:

[BoringSSL] nw_protocol_boringssl_get_output_frames(1301) [C5.1:2][0x7fea2d201de0] get output frames failed, state 8196
TIC Read Status [5:0x0]: 1:57

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

Я думаю, что мне действительно удалось исправить это самым случайным образом.Я подумал, может быть, есть какая-то функция перезагрузки (кроме .reload()), поэтому, используя автоматическое завершение синтаксиса, я придумал следующую команду:

areaNotasMes.reloadInputViews()

Видимо .reloadInputViews() - этофункция void, унаследованная от UIView, которая обновляет пользовательский ввод и вспомогательные представления, когда объект является первым респондентом.Вы можете проверить это здесь: reloadInputViews ()

Он действительно отправляет Error Domain=NSURLErrorDomain Code=-999 "(null)", хотя на самом деле работает так, как предполагалось, и обновляет информацию WebKitView.

Надеюсь, это поможеткто-то еще.

0 голосов
/ 15 декабря 2018

Нет, вам не нужно повторно инициализировать веб-просмотр при изменении URL.Я не могу рассказать о проблеме с информацией, которую вы предоставили.Я бы посоветовал вам установить ViewController как navigationDelegate веб-просмотра и реализовать этот метод, чтобы попытаться диагностировать проблему:

func webView(WKWebView, didStartProvisionalNavigation: WKNavigation!)

func webView(WKWebView, didFail: WKNavigation!, withError: Error)
//Called when an error occurs during navigation.

 func webView(WKWebView, didFailProvisionalNavigation: WKNavigation!, withError: Error)

Документация здесь

...