Проблема при прокрутке табличного представления при подаче в ячейки внешних данных - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь воссоздать браузер в приложении.Я создал раздел, в котором пользователь может добавлять свои любимые веб-сайты, чтобы они могли отображаться в виде таблицы.Я использую сторонний API для получения и отображения заголовка, описания и значка выбранного веб-сайта.Вот как это работает.Существует два контроллера представления: первый - сам браузер, а второй - любимый контроллер просмотра таблиц, где пользователь может видеть свои любимые веб-сайты.Когда пользователь нажимает на знак «+» в первом контроллере представления, текущий URL сохраняется в массиве с UserDefaults (я столкнулся с некоторыми проблемами при сохранении его с Codable), а затем во втором контроллере представления, табличное представление заполняется вцикл for с каждым URL, который пользователь сохранил.

Проблема заключается в следующем:

Когда пользователь уже добавил различные веб-сайты, он должен прокрутить, чтобы найти все, что он / она сохранил.Однако каждая ячейка табличного представления перерабатывается, поэтому она загружается снова каждый раз, когда пользователь прокручивает вверх и вниз.

Это когда пользователь впервые открывает любимый раздел This is when the user first opens the favourite section

Когда пользователь прокручивает

When the user scrolls

Когда пользователь прокручивает до ячейки табличного представления, которая предположительно уже загружена When the user scrolls up to a tableview cell that allegedly already loaded up

Используются следующие два массива:

var modifiedURLS = defaults.object(forKey: "modifiedURLS") as! [String]

var nonModifiedURLS = defaults.object(forKey: "nonModifiedURLS") as! [String]

Я использую два массива, потому что API, который я использую (SwiftLinkPreview), работает только тогда, когда запрашиваемый URL-адрес является нормальным (ничего больше после .com), поэтому я сохраняю измененный URL-адрес для доступа к заголовку, описаниюи свойства favicon с этим API, а также немодифицированный URL, в котором хранится именно тот URL, который пользователь хотел сохранить

Код при заполнении tableviewcontroller следующий:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "favoritesCell", for: indexPath) as! BookmarkTableViewCell

    let slp = SwiftLinkPreview(session: .shared, workQueue: SwiftLinkPreview.defaultWorkQueue, responseQueue: DispatchQueue.main, cache: DisabledCache.instance)

    cell.titleWebLabel.text = "Loading title..."
    cell.descriptionWebLabel.text = "Loading description..."
    cell.urlLabel.text = nonModifiedURLS[indexPath.row]

    for _ in 0...modifiedURLS.count - 1 {
        // The following is an asynchronous request
        slp.preview(modifiedURLS[indexPath.row], onSuccess: { result in
            let titleIndex = result.index(forKey: SwiftLinkResponseKey.title) as! Dictionary<SwiftLinkResponseKey, Any>.Index
            let title:String = result[titleIndex].value as! String
            cell.titleWebLabel.text = title

            let descriptionIndex = result.index(forKey: SwiftLinkResponseKey.description) as! Dictionary<SwiftLinkResponseKey, Any>.Index
            let description:String = result[descriptionIndex].value as! String

            cell.descriptionWebLabel.text = description

            let favIconIndex = result.index(forKey: SwiftLinkResponseKey.image) as! Dictionary<SwiftLinkResponseKey, Any>.Index
            let favIcon = result[favIconIndex].value
            cell.favIconImageView.sd_setImage(with: URL(string: "\(favIcon as! String)"))
        },
             onError: { error in print("\(error)")})
    }

    return cell
}

Проектможно найти по следующей ссылке GitHub: https://github.com/francisc112/IssueBrowser

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...