在UITableViewController中减少提供的数据集的正确方法

时间:2012-12-06 14:58:30

标签: objective-c ios cocoa-touch

我提供了对包含数据项的NSArray的引用。在我的自定义视图控制器中,它充当表视图的数据源,我解释每个项目并将其显示为单元格。 到目前为止一切都很好。

现在我的同事要求实现一个过滤器,它将基于项目属性之一的值。 此属性具有枚举值(其中4个)。因此,当我应用过滤器时,我应该只看到与特定值匹配的项目。 我的问题是我应该如何处理这些数据的过滤。

1)我应该将_data私有变量设置为指向原始数据源,然后覆盖“data”属性getter以考虑过滤吗?

2)我应该在控制器内生成一个单独的filteredData数组吗? 3)其他一些方法?

请注意> coredata + fetched resultscontr。是不可能的。物品数量永远不会超过150-200。

2 个答案:

答案 0 :(得分:1)

在我工作的应用程序中,我们有一个所有项目的数组和一个数据源引用的副本。应用过滤器时,它会替换副本,但基于原始数组。所以我猜#2。

答案 1 :(得分:1)

我会选择第二种选择。拥有filteredDatasource更方便。通过这种方式,您不仅可以知道应该显示的单元格,还可以知道它们的数量等等。此外,如果将来您想要对它们进行排序并使用部分,您将更加灵活。

例如,当您实现使用过滤数据源在内部多次调用的方法– tableView:numberOfRowsInSection:时,您不必多次遍历数组的对象,以便查看哪些应该通过过滤器。您只需返回[filteredDatasource count]。这样效率更高。