cocoa - 如何实时过滤 NSArray 或 NSMutableArray?

标签 cocoa macos

我想要一个 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/

相关文章:

objective-c - 如何从 osx 应用程序播放系统声音?

objective-c - NSFileManager 在 cocoa 中创建类似 .app 的文件/文件夹

xcode - 设置统一的文件路径

ios - 从 macOS 和 iOS 应用程序访问 Realm 对象服务器

macos - 这在 OS X TextView 中可以实现吗? (缩进换行)

objective-c - Cocoa NSArray/NSSet : -makeObjectsPerformSelector: vs. 快速枚举

cocoa - 接受 Dock 图标上的卷滴

macos - 更改一个名为 Applescript 的通知的图标

node.js - 无法从 Homebrew 软件安装watchman

macos - Mac 应用程序中的导航 Controller 与 iOS 应用程序类似吗?