我想要一个 NSArray 或 NSMutableArray 来始终显示数据集的过滤 View 。也就是说,如果过滤器设置为“显示带有字母 a 的内容”,并且添加了“blah”项目,则该项目将自动显示在列表中。但是,如果添加“bluh”,它不会显示在过滤列表中(但仍然会出现在底层数据集中)。
我看到 NSArray 和 NSMutableArray 上有过滤方法,但这些都是一次性方法。也就是说,过滤器在您调用该方法时发生,并且不再发生(当然除非您再次调用过滤器方法)。
我来自Java世界,我用过Glazed Lists广泛用于此类事情。我希望 Cocoa 中也能有类似的解决方案。
最佳答案
您很可能想使用NSArrayController按照 Ole 的建议。
您可以按照建议对其使用setFilterPredicate:
,然后您需要通过在 Controller 上调用arrangedObjects
来访问对象。您不需要setAutomaticallyRearrangesObjects:
,除非您打算对数据进行排序(使用排序描述符 - NSSortDescriptor 实例)。
NSArrayController 的设置确实可以非常轻松地处理在 TableView 中显示内容,因此如果这是您的最终目标,那么这正是您想要的。它与 NSSearchField 完美集成处理 UI 中的谓词。
如果您将其用作传递的后端对象,那么您可能需要自己编写一些比 NSArrayController 稍微轻一些的东西。
关于cocoa - 如何实时过滤 NSArray 或 NSMutableArray?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2356529/