【问题标题】:filtering content for UITableView过滤 UITableView 的内容
【发布时间】:2011-12-09 22:55:24
【问题描述】:

我正在查看 Apple 的 TableSearch 示例代码。看起来他们有一个用于所有内容的 NSArray 和一个用于过滤内容的 NSMutableArray。然后如果过滤器打开,那么它们将显示 NSMutableArray。如果它关闭,它们将显示包含所有数据的 NSArray。

1) 我想知道这是否是过滤器的常见实现,因为我之前没有做过太多过滤。

2) 补充一下这个问题,如果我有四个不同类别的过滤器,我是否仍会使用一个 NSMutableArray 在过滤器打开时显示过滤后的内容?或者我是否为每种不同类型的过滤器创建四个不同的 NSMutableArrays,然后根据打开的过滤器显示该列表。

假设常见的实现是为列表设置一个 NSArray,如果我要执行四个不同的 NSMutableArrays,或者如果依赖于来自他们选择什么过滤器选项的用户,我应该即时创建 NSMutableArray,然后重新加载 [tableView reloadData];

谢谢。

【问题讨论】:

    标签: iphone ios uitableview filter


    【解决方案1】:

    我面前没有那个示例应用程序,但您通常会使用谓词进行过滤,因此查看docs on NSPredicate 会对您有所帮助。

    因此,当您想要更改过滤器时,您可以通过更改谓词来实现。您不必创建所有过滤结果。您只在任何特定时刻创建您需要的那个。

    使用数组,您可以使用shown in this example 之类的代码进行过滤。关键线是

    NSPredicate *predicate;
    predicate = [NSPredicate predicateWithFormat:@"length == 9"];
    NSArray *myArray2 = [myArray filteredArrayUsingPredicate:predicate];
    

    过滤并不总是对数组进行。如果使用 Core Data,可以使用 NSFetchedResultsControllers 来完成。谓词也在那里使用,方式非常相似。谓词也可以用于其他事情,包括正则表达式过滤。如果您不熟悉它,值得一看。

    【讨论】:

      【解决方案2】:

      这真的取决于。如果您的基础数据在 Core Data 中,请使用NSFetchedResultsController 并提供NSPredicates。如果你有一个数据数组,遍历它并创建另一个数据数组可能是最简单的。

      一般来说,过滤器本身不太可能像整个绘图过程(包括实例化或回收表格单元格)那样昂贵。您可以使用 Instruments 做一些简单的事情和配置文件。

      就内存而言,保留四个不同的数组通常不是一个好主意,这是一种稀缺资源。

      无论如何,reloadData 都会涉及。 (可能取决于操作系统版本 - 请参阅 NSFetchedResultsController 文档。)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-11
        • 2017-02-05
        • 2011-08-07
        • 2015-11-08
        • 1970-01-01
        • 1970-01-01
        • 2021-10-02
        • 1970-01-01
        相关资源
        最近更新 更多