2016-09-19 81 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的知识范围之外。

因此,您会以封装功能。任务存储了解其内部层次结构以及如何获取所需的一组任务。表视图知道如何使用与当前任务列表的简单一一对应来获取其行。