Я пытаюсь загрузить WebKitView внутри UITableViewCell. Хотя ячейка повторяется, я всегда загружаю только одну ячейку этого типа. WebKitView загружает встроенный URL-адрес видео на YouTube.
Итак, в настоящее время код работает, но есть проблема, которая заставляет меня второй раз угадать мой код и задаться вопросом, есть ли что-то, что я пропускаю.
Поведение выглядит следующим образом:
1. Таблица загружает все ячейки правильно, без проблем
2. Ячейка, содержащая веб-набор, загружается правильно, а встроенная ссылка на YouTube загружается в ячейку. Видео может воспроизводиться / воспроизводиться в полноэкранном режиме и работает нормально.
Вот где начинается проблема:
3. Когда я прокручиваю вверх и вниз ячейки таблицы, каждый раз, когда видеоэлемент появляется на экране, наблюдается значительный скачок задержки, и я могу сказать, что ячейка перезагружается, поскольку внутри cellForRowAt есть оператор print, который печатает каждый время.
4. Ошибка выдается вместе с оператором печати. Ошибка выглядит следующим образом:
2018-05-17 08:46:07.305058-0500 Storefront[15267:9513857] WF:
_WebFilterIsActive returning: NO
2018-05-17 08:46:08.817680-0500 Storefront[15267:9513857] WF:
_userSettingsForUser mobile: {
filterBlacklist = (
);
filterWhitelist = (
);
restrictWeb = 1;
useContentFilter = 0;
useContentFilterOverrides = 0;
whitelistEnabled = 0;
}
Я провел определенное исследование этой ошибки, и, как я понял, она вызвана безопасным URL-адресом, на который я указал загрузку небезопасного контента. Это URL-адрес YouTube, так что это очень странно.
Я попытался добавить youtube.com в мои NSExceptionDomains внутри моего списка, без изменений. Однако, исходя из моих исследований, я не уверен, что распечатанная ошибка связана с задержкой, с которой я сталкиваюсь, и перезагрузкой webkitview каждый раз, когда оно появляется на экране. Это должно быть как-то связано с тем, как использование многократно используемой ячейки, содержащей webkitview, взаимодействует с загрузкой ячейки.
Вот мой код cellForRow:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if product.productHasVideo == true {
let cell = tableView.deque(VideoTableViewCell.self, configureFrom: self.product, at: indexPath)
if let id = product.embededYoutubeVideoId {
print("has id")
if let url = URL(string: "https://www.youtube.com/embed/\(id)") {
let urlRequest = URLRequest(url: url)
cell.videoWebKitView.load(urlRequest)
}
} else {
print("no id")
}
return cell
} else {
return UITableViewCell()
}
}
}
Есть мысли или идеи? Спасибо.
EDIT:
Я подумал, чтобы попытаться удалить весь раздел загрузки URL из кода и просто загрузить представление webkit. Это было успешно. Ячейка загрузила webkitview, но никогда не загружала URL. Я все еще получал ту же ошибку, что указана выше, и ту же задержку, что и выше, поэтому проблема определенно не имеет ничего общего с моим plist или youtube или указанным мной URL.
Вот код внутри таблицы ViewCell:
import UIKit
import WebKit
class VideoTableViewCell: UITableViewCell, ViewModelConfigurable {
typealias ViewModelType = ProductViewModel
var viewModel: ViewModelType?
@IBOutlet var videoWebKitView: WKWebView!
func configureFrom(_ viewModel: ViewModelType) {
self.viewModel = viewModel
}
override func awakeFromNib() {
super.awakeFromNib()
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}