2010-06-17 64 views
2

我有一個自定義的UITableViewCell,其中包括一個標籤和一個imageView。如果表視圖是可見視圖,並且它有一個單元格,如果我以編程方式更新標籤的文本以及imageView的圖像和日誌,那麼大約需要4秒鐘後,我在標籤的日誌中看到通知和圖像更新。這裏是發生了什麼以及該訂單:自定義UITableViewCell不會立即更新其子視圖,爲什麼?

-Load包含表和一個自定義單元格

- 寫入一個文件到磁盤使用和的NSOperation(和隊列)的觀點

- 當的NSOperation在寫完它觸發一個NSNotification(defaultCenter),它告訴細胞的視圖更新標籤和圖像的文件,我將[自setNeedsDisplay]

,尤其是圓形我在日誌中看到,該小區已經得到通知並完成設置新值

- 約4秒後,單元格的視圖實際更新。

什麼給?

回答

4

我的問題的解決方案取決於我更新數據的方式,我使用NSOperation(和隊列)發送通知,然後通知響應者更新視圖。問題是一個技術上的NSOperation住在另一個線程所以我應該做的是:

- 寫入一個文件

磁盤使用和的NSOperation(和隊列) - 當被的NSOperation寫完它觸發文件一個NSNotification(默認中心),響應者應該執行SelectorOnMainThread一個方法,實際更新視圖

這是否和我的手機立即更新。

+0

謝謝!這也解決了我的問題。我還沒有意識到線程問題,但在這種情況下它並沒有穿過我的腦海。 – ephemer 2015-08-24 09:19:11

0

您應該致電reloadRowsAtIndexPaths:withAnimation:更新表視圖中的特定單元格。

+0

該函數可以工作,但由於修改視圖會導致它更新,所以它是一個笨手笨腳的解決方案,reloadRowsAtIndexPaths:withAnimation:實際上會要求它重新加載單元格。解決方案涉及我提到的NSOperation隊列,下面回答。 – Shizam 2010-06-18 04:28:33

+0

@shizam:謝謝你解釋。我仍然在學習iOS中的線程和事件循環如何交互。它應該在某個地方記錄下來。 – progrmr 2010-06-18 14:23:17

+0

當然,是的,我回去重讀他們的示例NSOperationSample.xcodeproj項目,以逐步瞭解他們如何使用它並使用performSelectorOnMainThread看到它們。 – Shizam 2010-06-18 15:06:52

相關問題