Как использовать метод reloadData tableView iphone - PullRequest
2 голосов
/ 08 апреля 2011

У меня есть один класс UITableViewController. Я использую NSMutableArray для заполнения ячеек таблицы. Я выбираю данные из базы данных и добавляю их в массив. Но клетка показывает старые результаты. Как я могу использовать метод relaydData и где я должен вызвать этот метод в моем UITableViewController?

Ответы [ 5 ]

4 голосов
/ 08 апреля 2011

Я цитирую документацию Apple, когда ее не использовать:

Делегат табличного представления или источник данных вызывает этот метод, когда он хочет, чтобы табличное представление полностью перезагрузило свои данные.Его не следует вызывать в методах, которые вставляют или удаляют строки, особенно в анимационном блоке, реализованном с помощью вызовов beginUpdates и endUpdates.

Поэтому вызывайте его, когда вы изменили модель, но не используете методы tableviewизменить таблицу, как:

deleteRowsAtIndexPaths:withRowAnimation:
deleteSections:withRowAnimation:
insertRowsAtIndexPaths:withRowAnimation:
insertSections:withRowAnimation:
3 голосов
/ 08 апреля 2011

вы можете перезагрузить ячейку таблицы, используя

//fetch data from database.. and update array

//reload table data asper new data

[self.tableView reloadData];
2 голосов
/ 08 апреля 2011

Вы можете (и должны) вызвать reloadData:, когда хотите принудительно перезагрузить таблицу или когда вы знаете, что она еще не была нарисована.

Часто вы будете делать это в методе viewDidLoad: вашего контроллера представления или viewDidAppear: (или даже viewWillAppear:).

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

И, кстати, как я недавно обнаружил, когда вы вызываете reloadData:, таблица перезагружается асинхронно (и довольно быстро). Однако методы deleteRows..., deleteSections..., insertRows... и insertSections... (особенно между вызовами beginUpdates: и endUpdates:) выполняются синхронно и могут, для больших таблиц, замедлять работу приложения (и зависать). пользовательский интерфейс) значительно. Ваш пробег может варьироваться, но это был мой опыт с этими методами. Я на самом деле пошел к модели, где я использую deleteSections..., а затем reloadData: (потому что я все равно удалял все разделы).

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

Добавьте { didSet { tableview.reloadData() } перед вашим классом экземпляра массива типов.

Пример:

Код класса Swift:

class Data {
  var name  = ""
  var height = ""
}

ViewController code / InstantDataClass типа пустой массив:

let dataINDataClass = [Data]  { 

  didSet {

  tableview.reloadData()

}

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

0 голосов
/ 08 апреля 2011

При каждом вызове метода reloadData табличное представление обновляется.Поскольку вы хотите обновить таблицу после загрузки данных из базы данных, вы можете вызвать перезагрузку данных после завершения выборки.

// code to fetch data from database

// when done, reload the table
[myTableView reloadData];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...