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

Любые идеи о том, как я могу эффективно обновить табличное представление / ячейку?

3
Mihai Damian 19 Июн 2009 в 15:17

4 ответа

Лучший ответ

Вы пробовали позвонить [cell setNeedsDisplay], но в основном потоке?

SetNeedsDisplay при вызове в фоновом потоке практически ничего не делает,

Попробуй это:

[cell performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:nil waitUntilDone:NO];
8
Aran Mulholland 15 Июн 2010 в 02:42

Вы пробовали позвонить [cell setNeedsDisplay]?

0
drewh 19 Июн 2009 в 12:45

Не уверен, что именно вы пытаетесь достичь с изображениями - но могу ли я предположить, что они исходят с сервера, и именно поэтому вы хотите загрузить их в другом потоке?

Я бы не стал загружать ячейки перед отображением таблицы - вы должны как можно чаще использовать ленивую загрузку, чтобы максимально использовать память на устройстве.

Я предлагаю изучить использование подкласса NSOperation для управления загрузкой изображений. Во-первых, NSOperation выполнит за вас всю сложность потоковой передачи и позволит вам ставить операции в очередь. После этого вы сможете расставить приоритеты для операций, которые вы хотите выполнить, для ячеек вверху.

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

Если у вас есть операция для комбинации изображения / ячейки, вы сможете обновить каждую ячейку по завершении операции. Это вместе с определением приоритетов операций даст вам оптимальное решение.

Если NSOperations кажутся сложными или вас это отталкивает - пожалуйста, попробуйте - это намного проще, чем я мог бы представить.

0
Grouchal 19 Июн 2009 в 12:20

Используете ли вы обратный вызов, чтобы уведомить контроллер вашего tableview о том, что изображения загружены? В противном случае это был бы идеальный метод.

Когда изображение загружается, запускайте обратный вызов для контроллера табличного представления, который устанавливает изображение в ячейке, а затем вызывает reloadData для tableView. Таким образом, всякий раз, когда загружается новое изображение, таблица будет обновляться для его отображения.

0
Jasarien 19 Июн 2009 в 12:09