после запуска приложения. Как перезагрузить просмотр таблицы, если каждый раз в массиве появляется какой-либо новый контент, и если массив один и тот же, перезагрузка не требуется - PullRequest
0 голосов
/ 11 октября 2018

Моя проблема: я хочу перезагрузить tableview данные только один раз после запуска приложения, но перезагружает каждый раз, когда появляется табличное представление, и если массив один и тот же, ему не нужно перезагружать снова и снова

func onHttpSuccess(data: NSDictionary, RID: Int) {
    DispatchQueue.main.async {
        self.progressHUD.hide(animated: true)
    }
    if data.value(forKey: "status") as! Bool {

        if (RID == 1)
        {

            if ((data.value(forKey: "data") as? NSArray)?.count) != nil
            {
                self.userData = (data.value(forKey: "data") as? NSArray)!
                UserDefaults.standard.set(self.userData, forKey: Constants.catDATA)

                print(self.userData)
                if self.userData.count > 0
                {

                    DispatchQueue.main.async
                        {
                            self.tableView.isHidden = false
                            self.tableView.reloadData()
                    }
                }
            }
        }

    }
    else
    {
        Utility.sharedInstance.showAlertView(message: (data.value(forKey: "message") as? String)!, controllerObj: self)
    }

}

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Как правило, перезагрузки табличного представления следует рассматривать как недорогую операцию, и, если вы испытываете некоторую задержку / отсутствие ответа при перезагрузке табличного представления, первые области, к которым следует обратиться, будут:

  1. Столовые ячейки снимаются, а не создаются каждый раз, когда они нужны?Если нет, удалите из кэша ячейки.

  2. Есть ли какая-то дорогостоящая операция внутри tableView(cellForRowAt:IndexPath)?Если это так, посмотрите, как это сделать быстрее.

  3. Вы анализируете свой HTTP-ответ в основном потоке?Если это так, то это может быть причиной задержки, а не перезагрузки самого табличного представления, поэтому вы можете переместить его в фоновый режим, и все будет в порядке.

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

class MyTableViewController : UITableViewController {

    var tableViewData: NSArray

    func isEqual(_ oldData: NSArray, newData: NSArray) -> Bool {
        // check that all the records in the array are equal
    }

    // call this from inside the onHttpSuccess method in place of self.tableView.reloadData() 
    func reloadIfNeccecary(newData: NSArray) {
        if !isEqual(tableViewData, newData) {
            self.tableView.reloadData()
        }
    }

}

Примечание: What you на самом деле следует делать вместо использования NSArray и NSDictionary здесь для анализа HTTP-ответа с использованием пользовательской структуры и протокола Decodable.Затем вы можете сделать элементы массива вашего объекта ответа Equatable, а затем он сделает реализацию isEqual тривиальной.

0 голосов
/ 12 октября 2018

Одним из довольно простых решений для вас является просто объявить другую переменную для целей сравнения, поэтому изначально ваш временный массив будет пустым, а ваш фактический массив будет содержать некоторые элементы, поэтому вы просто сравниваете оба массива, и если оба они одинаковы, то вы не используетеНе нужно ничего делать, но если оба не совпадают, просто перезагрузите таблицу и обновите временный массив, так что это будет полезно для сравнения и в следующий раз.Пожалуйста, убедитесь, что вы обновили временный массив после перезагрузки таблицы.

Надеюсь, это вам поможет.

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