如何在UITableView中仅显示数据源的子集?

时间:2013-02-27 01:24:48

标签: ios uitableview datasource

我想换出tableview的内容。数据源的元素带有一个标志,表示是否应该显示它们。

最终,我希望能够根据标志交换所显示的内容。但是现在,我将解决以下问题。

我的表格如何只显示数据源的子集?

要求[tableView重新加载],这似乎是我的大多数搜索产生的。我想根据条件(在这种情况下为标志)一次只显示一些数据源项。

为清楚起见,这是一个功能示例。


我们在数组中有50个Friend元素。它是我们表的数据源。当我们加载应用时,会显示所有50位朋友。

这些朋友中的20个在Friend课程中被标记为“Awesome”。当您点击Awesome按钮时,表格中会显示这20个。

其中10个在Friend课程中被标记为“Lame”。当您点击Lame按钮时,表格中会显示这10个。


我需要采用哪些方法来实现这一目标? TableView讨论是巨大的,到目前为止,我一直在查看错误和错误,但没有令人满意的结果。

2 个答案:

答案 0 :(得分:3)

您可以设置NSPredicate来过滤fetchResults将返回的值:

- (NSFetchedResultsController *)fetchedResults {
...

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"flag == %@", @"Awesome"];
    [fetchRequest setPredicate:predicate];  

...

这只会返回符合NSPredicate

条件的记录

答案 1 :(得分:3)

保留两个数据结构。第一个是主数据集。第二个只包含您要显示的数据。将表指向第二组数据。

基本上,当您想要使用不同的子集重新加载表时,创建一个新数组,迭代主数据集并仅将您想要的对象添加到新数组中。

第二个数组只是引用了主数组中的原始对象,没有多少额外开销。

更新:为了扩展Rob Napier的评论,我提到的主数据结构将是“模型”,第二个数据结构将是支持表数据源的数据。 / p>