TTTableImageItem не загружает изображение до прокрутки - PullRequest
2 голосов
/ 14 июля 2009

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

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

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

Кто-нибудь? Заранее спасибо.

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, асинхронная загрузка) из любого места, НО основной поток, он не запустился бы. Если я начну загрузку в основном потоке, она начнется немедленно ..

Ответы [ 6 ]

5 голосов
/ 14 сентября 2009

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

1 голос
/ 26 февраля 2010

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

0 голосов
/ 28 марта 2012

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

[TTURLRequestQueue mainQueue].suspended = NO;

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

0 голосов
/ 30 июня 2010

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

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

0 голосов
/ 14 июля 2009

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

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

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

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

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

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

0 голосов
/ 14 июля 2009

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

...