2016-09-19 82 views
1

我正與一個TableViewController建議 - 如何模型細節列表

顯示在TableViewController對象的工作是任務

struct Task{ 
    var type: String 
    var children = [Task]() 
} 

我存儲在一個TaskStore基本任務的對象。 TaskStore有一個成員數據透視表,我用它來跟蹤TaskStore中的當前元素。默認情況下,pivot爲-1,TableViewController列出TaskStore中的所有對象。當用戶點擊TableViewController中的一行時,我使用選定的行更新數據透視表,並在TaskStore.sharedInstance.get(pivot).children中顯示Task對象。後退按鈕設置回到-1並顯示基本任務存儲。

我擔心這太複雜了。它工作時沒有真正的問題,但我確實需要在Pivot不是-1時添加異常。

是否有更合適的方法來顯示TaskStore中的Task對象的子對象,而無需創建新的TableViewController?

感謝您的任何意見

回答

0

原因你不快樂是你做了很多複雜的工作在你的cellForRowAtIndexPath拿起正確的數據。它必須解釋這個關鍵點並適當地潛入任務商店。我建議你忘記這一切。瞭解如何潛入任務存儲區並不是表視圖數據源的業務!

因此,我會做什麼,是單獨從表的實際數據源的整體分層模型。數據源在任何時刻都應該由一系列任務組成,即[Task]

然後問題出現在維護該數組中。當用戶點擊一行時,可以用任何你喜歡的方式替換該任務列表,並調用reloadData。通過這種方式,您可以維護錶行和任務數組之間的直接對應關係。 cellForRowAtIndexPath只是要求來自Tasks數組的那一行的信息,它已完成。簡單明瞭。

同時,知道您的層次結構的工作都發生在TaskStore中,它是而不是,它本身是表的數據源。您可能還需要某種形式的指向TaskStore的指針,說明當前顯示的父級是什麼,但同樣,簿記將發生在陣列之外,並且在您的cellForRowAtIndexPath的知識範圍之外。

因此,您會以封裝功能。任務存儲瞭解其內部層次結構以及如何獲取所需的一組任務。表視圖知道如何使用與當前任務列表的簡單一一對應來獲取其行。