我想换出tableview的内容。数据源的元素带有一个标志,表示是否应该显示它们。
最终,我希望能够根据标志交换所显示的内容。但是现在,我将解决以下问题。
我的表格如何只显示数据源的子集?
我不要求[tableView重新加载],这似乎是我的大多数搜索产生的。我想根据条件(在这种情况下为标志)一次只显示一些数据源项。
为清楚起见,这是一个功能示例。
我们在数组中有50个Friend元素。它是我们表的数据源。当我们加载应用时,会显示所有50位朋友。
这些朋友中的20个在Friend课程中被标记为“Awesome”。当您点击Awesome按钮时,表格中会显示这20个。
其中10个在Friend课程中被标记为“Lame”。当您点击Lame按钮时,表格中会显示这10个。
我需要采用哪些方法来实现这一目标? TableView讨论是巨大的,到目前为止,我一直在查看错误和错误,但没有令人满意的结果。
答案 0 :(得分:3)
您可以设置NSPredicate
来过滤fetchResults将返回的值:
- (NSFetchedResultsController *)fetchedResults {
...
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"flag == %@", @"Awesome"];
[fetchRequest setPredicate:predicate];
...
这只会返回符合NSPredicate
。
答案 1 :(得分:3)
保留两个数据结构。第一个是主数据集。第二个只包含您要显示的数据。将表指向第二组数据。
基本上,当您想要使用不同的子集重新加载表时,创建一个新数组,迭代主数据集并仅将您想要的对象添加到新数组中。
第二个数组只是引用了主数组中的原始对象,没有多少额外开销。
更新:为了扩展Rob Napier的评论,我提到的主数据结构将是“模型”,第二个数据结构将是支持表数据源的数据。 / p>