сохранение изображения в UITableViewCell - PullRequest
0 голосов
/ 18 февраля 2011

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

То же самое для текста, как я могу сохранить текст ...

Ответы [ 2 ]

2 голосов
/ 18 февраля 2011

Посмотрите пример приложения LazyTableImages в разделе примера кода сайта iOS. У этого есть отличный пример того, как загрузить изображения для ячейки таблицы с помощью асинхронных вызовов NSUrlConnection и сохранить изображения (и текст) в NSMutableArray.

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

2 голосов
/ 18 февраля 2011

Если он не очень большой, вы можете загрузить его один раз и сохранить в пользовательских настройках (NSUserDefaults) как объект NSData.Работает для меня.

В качестве альтернативы, вы можете использовать асинхронные запросы с NSUrlConnection и реализовывать кэширование любым удобным для вас способом.(Например, обновляйте изображение только раз в неделю.)
Более того, даже настройки кэша по умолчанию NSUrlConnection могут работать достаточно хорошо.
Подробнее о кэшировании

edit
Пример асинхронного запроса.

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString: url]];
URLConnectionDelegate *delegate = ...;

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request
                                                            delegate:delegate];

if (!connection) {
  // something went wrong
}

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

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
  [receivedData appendData:data];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
  // success, do whatever you want with data

  [receivedData release];
  [connection release];
}

Ссылка выше и документация API предоставляют более подробную информацию о структуре делегата.

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