2009-11-10 128 views
1

所以這是我的問題: 我有一個UITableView自定義UITableViewCells。每個單元格都有一個UIImageView,它使用異步圖像加載下載遠程圖像。異步圖像加載UITableView問題

它幾乎完美的工作,但我有這個奇怪的問題。

當視圖加載時,我可以看到沒有滾動的5個或6個第一個單元格(iPhone的顯示高度)。

問題是:這時每個單元的圖像都不會出現。將表格滾動到底部,單元#7〜end完美加載。

WEIRD的事實是:當我回滾到頂端時,現在5或6個單元格完美加載。

我的第一個想法是:加載視圖時,cellForRowAtIndexPath方法在用戶交互後不會自動爲第一個單元調用loadimage方法。

但使用的NSLog(一步一步)找到問題出在哪裏,事情是:

  1. 的cellForRowAtIndexPath調用的LoadImage方法
  2. 內的LoadImage方法,創建NSURLConnection的
  3. NSURLConnection的didReceiveData的方法不被稱爲

所以,實際上調用loadimage方法。但沒有收到數據。

滾動到底部,然後返回到頂部單元格,這都沒關係。 這個詞是WEIRD。

回答

0

你說NSURLConnection是創建的,但你永遠不會說它開始。確保您要麼調用啓動連接的方法之一(initWithRequest:delegate:startImmediately:start)。

如果這不是你的問題,那麼你可以檢查是否有任何其他NSURLConnection委託方法被調用?請特別注意connection:didFailWithError:,因爲在連接工作之前可能會出現一些奇怪的網絡啓動過程,導致它們在第一次加載時失敗,但不會在以後出現。

最後,當您發送表格視圖reloadData消息時,可以檢查它是否有效嗎?像[tableView performSelector:@selector(reloadData) withObject:nil afterDelay:1.0];之類的東西,以便它在等待一秒後重新加載。

1

您可以嘗試使用我的JImage對象,它與UIImageView完全相同,但它傳遞的是URL而不是文件路徑。當圖像加載(完全異步)時,會顯示一個活動指示器。像使用UIImageView一樣使用它,但使用URL初始化它。

Implement a kind of white board on Iphone

0

最可能的解釋是,異步調用的時間過長;如果它在繪製單元格之前沒有返回,則您的單元格將在沒有繪製它的情況下繪製,並且不會重繪,直到從屏幕上滾動並重新打開。

您可以在您的單元格第一次繪製之前同步加載圖像(這可能不是您想要的,因爲這會損害UI響應性),或者您可以在connectionDidFinishLoading:handler中添加一些代碼,將該表標記爲需要重新顯示剛剛加載的圖像的單元格。

0

謝謝Tim,Skirwan和Dutchie! 我發現了這個問題。現在很明顯,omg! 我只是看錯了地方!

UITableView的數據來自XML。解析它之後,我調用reloadData。 我之前沒有看到這個過程的所有方法都在NSAutoreleasePool中處理。所以,當它完成時(非常快),所有消失(並且NSURLConnection沒有足夠的時間來加載圖像)。