Как обновить UITableView во время выполнения, после загрузки представления - PullRequest
7 голосов
/ 19 декабря 2011

Я прочитал несколько статей о UITableView, в том числе официальный документ и некоторые по SO. Но моя ситуация, кажется, другая.
Я хочу обновлять таблицу каждый раз при загрузке представления. И я должен получить данные, используя HTTP-запрос.
Что я получил сейчас:

  1. При входе в табличное представление я должен использовать несинхронный HTTP-запрос для обновления данных. Потому что я не хочу, чтобы основной поток ждал. Единственное место для этого - метод tableView:cellForRowAtIndexPath:. Поэтому я возвращаю 0, потому что в начале данных не было.
  2. Когда я получаю ответ HTTP, я обновляю строки в главном потоке, используя beginUpdates endUpdates insertRowsAtIndexPaths:withRowAnimation:
  3. И я должен обновить «Источник данных» одновременно, но как это сделать?
    Или я должен создать поток демона и периодически обновлять свои данные? Так что данные будут готовы при загрузке TableView.

Ответы [ 3 ]

13 голосов
/ 19 декабря 2011

Вы бы сделали это так:

  • У вас есть логическое значение или некоторая переменная, где вы можете надежно определить, есть ли у вас все данные.
  • В viewWillAppear, сбросить все,Начните загружать ваши данные.
  • Если у вас еще нет данных, вы отображаете только один раздел с одной ячейкой (ячейка-заполнитель, которая читает "Загрузка ..." и показываетнапример, spinner).
  • Как только данные полностью загружены, вы устанавливаете bool или что-либо еще.
  • Вызов [self.tableView reloadData];

Во всех ваших UITableViewDataSource методов, которые вам нужно будет проверить, есть ли у вас данные уже или нет.Если нет, вы возвращаете данные заполнителя.

1 голос
/ 19 декабря 2011

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

С точки зрения вашего вопроса об «источнике данных», источником данных для UITableView являетсяпросто объект, который реализует протокол UITableViewDataSource, о котором вы можете прочитать здесь .Зачастую XCode устанавливает объект UITableViewController, который будет выступать в качестве делегата и источника данных для вашего табличного представления.Как вы на самом деле храните свои данные, зависит от вас.Протокол источника данных просто предоставляет методы, с помощью которых табличное представление будет «запрашивать» данные, которые ему необходимо загрузить.

1 голос
/ 19 декабря 2011

[yourtablename reloadData]; поможет вам перераспределить данные в виде таблицы. Вы можете позвонить, когда получите ответ от вашего сервера

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