Добавление данных в UITableView, когда UITableView виден? - PullRequest
0 голосов
/ 11 октября 2011

Я прочитал каждый пост здесь на SO, касающийся UITableView и reloadData, и ничего, что я нашел, не сработало для меня.

В конструкторе пользовательского интерфейса у меня есть xib-файл UIViewController с UIView в нем, а на этом UIView - UITableView. Мой подкласс UIViewController - это ссылки на владельца файла для XIB. Мой подкласс - UITableViewDataSource и UITableViewDelegate, и я подключил dataSource и делегирую ссылки на выходы, чтобы они указывали на UITableView в построителе пользовательского интерфейса. Я связал UITableView в компоновщике с IBOutlet, определенным в моем подклассе.

Изначально, когда отображается UITableView, базовый NSMutableArray, который я использую в качестве источника данных, не имеет данных, поэтому UITableView пуст, как и ожидалось.

Позже я изменяю массив, добавляя в него данные.

Затем я попробовал следующее, чтобы обновить представление UITableView, но все безрезультатно:

  • Вызывается [myTableView reloadData] после изменения моего массива

  • Вызывается [myTableView executeSelectorOnMainThread: @selector (reloadData) withObject: nil waitUntilDone: NO];

  • Вызывается insertRowsAtIndexPaths в myTableView, думая, что мне, возможно, придется фактически сказать ему, какую строку обновлять.

Ни одна из этих работ. Тем не менее, данные есть, и все, кажется, подключено нормально, так как всякий раз, когда я перетаскиваю UITableView вверх и освобождаю, так что первая строка временно исчезает, внезапно он действительно отображает ожидаемое содержимое, когда возвращается на экран. *

Есть идеи?

Ответы [ 2 ]

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

Хотя у меня все было правильно подключено, я гонялся за хвостом. В конечном итоге проблема была вовсе не в UITable, а в том, что базовый массив использовался в качестве основы для моего UITableView, а не в словаре, который я использовал для генерации текста для каждой ячейки!

Массив обновлялся правильно, затем вызывался reloadData. Но словарь не загружался необходимыми данными, пока не был вызван AFTER reloadData. Таким образом, UITable «заполнялся» нужным количеством строк, но все они выглядели пустыми, что создавало впечатление, что вещи вообще не работают.

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

Уф!

0 голосов
/ 11 октября 2011

Я уверен, что вы правильно звоните [tableView reloadData]

Но вы можете установить [количество массивов] в этом методе

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

И в пределах

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
cell.textLabel.text = [array objectAtIndex:indexPath];}

Это должно позволить вам показать данные из массива.

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