2013-02-02 29 views
0

我試圖在UITableViewCell內部開發進度視圖。在單元中下載進度

在我的第一個實現中,我在我的單元格內使用了AFHTTPRequestOperation及其setDownloadProgressBlock:^

後來我的目標變得更加複雜。我有一個UITableView,顯示不同的內容(歌曲播放列表)。同一首歌曲可能會在幾個播放列表中退出。當我開始在一個播放列表中下載歌曲並切換到另一個(其中還包含此歌曲)時,我想要看到第一個播放列表中的下載進度。

我已成功使其工作。在下載過程開始時,我在全局類中創建了一個進度視圖。爲了顯示這個單元格的進度視圖,我只使用addSubviewremoveFromSuperview。但我不喜歡這種方式,因爲我必須在現有進度視圖之上添加進度視圖(因爲每個單元都有自己的進度視圖,這是由於應用程序設計)。

現在我使用另一種方法。當我顯示單元格時,我將setDownloadProgressBlock:^設置爲現有的進度視圖。我工作正常,但是當我打開另一個播放列表時,進度顯示在另一首歌曲上。我敢打賭,這是因爲我使用了可重複使用的細胞。

我有點厭倦了實現這個東西,任何想法如何使它正常工作?

回答

1

你是對的,由於細胞的重新使用,這是不恰當的與下載進度回調每個單獨的小區連接。爲了解決這個問題,我會節省下載狀態在Song的對象,當它被設置爲YES,開始觀察的通知。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(progressDidUpdate:) name:kSongDownloadProgressUpdateNotificaton object:nil]; 

在進度回調塊AFHTTPRequestOperation,用歌曲ID標識發送了name:kSongDownloadProgressUpdateNotificaton

個體細胞的progressDidUpdate:,找出它的更新對自身的進步,如果不能忽視它,如果是,在細胞更新progressView。下載完成後,刪除通知的觀察。

此外,您需要在Song對象保存下載的百分比數據,因爲當調用的UITableView和cellForRowAtIndexPathSong隨時被分配到另一個單元格,保存和恢復進展將使下載狀態持續。

+0

歌曲對象位於核心數據中。在那裏存儲進度並將更新寫入核心數據是一個不錯的主意? – iWheelBuy

+0

@iWheelBuy你總是可以創建一個單獨的NSMutableDictionary它映射出的歌曲ID下載狀態。 – overboming

+0

一切都很好! – iWheelBuy