TTTableImageItem не загружает изображение до прокрутки

StackOverflow https://stackoverflow.com/questions/1125257

  •  13-09-2019
  •  | 
  •  

Вопрос

Я использую проект three20 для своего приложения для iPhone.Я сузил круг своих задач и теперь просто пытаюсь воссоздать пример "Веб-изображения в таблице", который прилагается к проекту.Я скопировал код именно так как и в проекте, за исключением того, что я не использую TTNavigator (как в примере), но я добавляю свой TTTableViewController вручную на панель вкладок.

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

В консоли четко указано, что загружаются изображения, и вы видите, что индикатор активности вращается как вечность..И если я не прокручу вверх и вниз один раз, изображения никогда не появятся.

Кто-нибудь?Заранее благодарю.

P.S:Если я использую этот код в любом случайном UIView, он также не работает (показывает только черный квадрат).:

TTImageView* imageView = [[[TTImageView alloc] initWithFrame:CGRectMake(30, 30, 100, 100)] autorelease];
imageView.autoresizesToImage = YES;
imageView.URL = @"http://webpimp.nl/logo.png";
[self.view addSubview:imageView];

Если я помещу этот код в свой AppDelegate (прямо в окно), он действительно сработает ..странный?

ВОЗМОЖНОЕ РЕШЕНИЕ: Хотя я перестал использовать TTImageView для этой цели, я думаю, что выяснил, в чем была проблема;нарезание потоков (следовательно, принятие ответа Дениз Мерт Эдинчик).Если бы я запустил асинхронную загрузку (потому что, по сути, TTImageView - это асинхронная загрузка) из любого места, КРОМЕ основного потока, она бы не запустилась.Если бы я запустил загрузку в основном потоке, она началась бы немедленно..

Это было полезно?

Решение

Для меня звучит как проблема с потоками, вы создаете TTImageView в основном цикле выполнения?

Другие советы

Я нахожу одну интересную вещь.Когда я использую комбинацию TTTableViewController, TTTableViewDataSource и TTModel, у меня возникает такая же проблема с загрузкой TTImageView.Моя проблема заключалась в том, что моя реализация методов модели 'isLoading' и 'isLoaded' не возвращают правильные значения после инициализации модели.Это вынуждает меня вызывать перезагрузку модели вручную в методе 'viewDidAppear', и это вызывает проблему с загрузкой изображения.Поэтому я исправляю свои методы 'isLoading' и 'isLoaded', чтобы оба возвращали 'NO' после инициализации модели, и все в порядке.

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

Я написал что-то похожее на это, где представление изображения будет загружать свое собственное изображение из Интернета.

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

Когда вы прокручиваете табличный вид, ячейки настраиваются на перерисовку при появлении на экране, вот почему они появляются при прокрутке.

Когда изображение загрузится, сообщите ячейке, в которой оно находится, о необходимости перерисовки, отправив ей сообщение setNeedsDisplay.

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

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

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

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

Это проблема с потоком.Вы можете загрузить изображения, включив строку:

[TTURLRequestQueue mainQueue].suspended = NO;

в - (void)didLoadModel:(BOOL)firstTime.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top