2013-08-20 40 views
0

我正在實現一個下載系統,我有這個表格視圖元素來自核心數據。保持跟蹤UITableViewCell的動態

我希望用戶按下單元格上的下載按鈕,系統將開始下載相關文件。

我有我的下載庫,可以溝通和通過委託方法報告進度,我的問題是,我不知道如何關聯/正確地重新顯示/更新可重用單元格中的進度視圖。

下載庫與NSURLs一起工作,我可以繼承NSURL並追加一個屬性協議來表示我的核心數據實例,但即使如此,保持UI更新單元格的最佳方法是什麼?

每次代表接收事件時,我應該打電話給[self.tableView reloadData]嗎?

回答

1

正確,這是一個棘手的問題。正如你已經注意到的那樣,當表格被滾動時,單元格對象被重用,並且不能保證相同的單元格對象將繼續引用表格的相同索引路徑。

我建議看一看tableView:willDisplayCell:forRowAtIndexPath:它正好在顯示單元格之前調用表視圖委託。這將是將此單元格設置爲下載庫中的正確代表的好地方。

至於你的第二個問題,不,不要在每個事件上調用[self.tableView reloadData]。這將是一個表現破壞的決定。 :)

+0

建議是好的;我雖然關於'tableView:willDisplayCell:forRowAtIndexPath:',但將下載庫委託設置在單元中,這意味着它將接收所有下載事件,因爲庫不能有多個委託。所以我們的想法是將表控制器設置爲下載庫的委託,實現這些方法並根據委託方法執行UI任務(例如進度)。 –

+0

我現在的問題是從委託方法(最有可能不知道任何關於單元格的東西,最多隻有NSURLs)追趕正確的單元格,方法是查看可能附加屬性的對象,我將使用它來查找核心數據收集。我有核心數據記錄後找到單元格(?),檢查它是否可見(不起作用),等等。 –

+0

我不確定別人是怎麼做的,在音樂應用程序中你可以看到一個下載圖標每個單元格下載文件,當它開始下載進度視圖(我仍然需要了解它是一個按鈕還是一個accessoryView)更新自己,並能夠在它離開屏幕的同一點重新繪製。 –