筛选UITableView的内容

我在看Apple的TableSearch示例代码。 它看起来像他们有一个NSArray的所有内容,NSMutableArray过滤的内容。 然后如果filter打开,那么他们会显示NSMutableArray。 如果closures,他们会显示包含所有数据的NSArray。

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

2)要添加到这个问题,如果我有一个四个不同类别的filter,我仍然会使用一个NSMutableArray显示filter打开时的过滤内容? 或者,我为每个不同types的filter创build四个不同的NSMutableArrays,然后根据打开哪个filter来显示该列表。

假设常见的实现是有一个NSArray的列表,我很困惑,如果我做四个不同的NSMutableArrays,或者如果取决于从用户的点击过滤选项,他们select,我应该dynamic创buildNSMutableArray,然后重新加载[tableView reloadData];

谢谢。

我没有在我面前的示例应用程序,但你通常会过滤使用谓词,所以这将有助于您查看有关NSPredicate的文档 。

所以当你想改变filter的时候,通过改变谓词来做到这一点。 您不必创build所有过滤的结果。 你只能在任何时候创build你需要的。

有了数组,您可以使用如此示例中所示的代码进行过滤。 关键线是

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

过滤并不总是与数组完成。 如果使用核心数据,可以使用NSFetchedResultsControllers完成。 在那里也使用谓词,非常相似。 谓词还可以用于其他事物,包括正则expression式过滤。 如果你不熟悉它,值得一看。

这真的取决于。 如果您的基础数据位于核心数据中,请使用NSPredicate并为其提供NSPredicate 。 如果您有一组数据,则可能最容易遍历它并创build另一个数据数组。

一般来说,filter本身不可能像整个绘图过程那样昂贵(包括实例化或回收表格单元格)。 您可以使用乐器轻松完成configuration。

保持四个不同的arrays通常不是一个好记的内存,这是一个稀缺的资源。

无论如何,reloadData将会被涉及。 (根据操作系统版本,也许 – 请参阅NSFetchedResultsController文档。)