NSPredicateEditor,忽略没有搜索词的行?

Posted

技术标签:

【中文标题】NSPredicateEditor,忽略没有搜索词的行?【英文标题】:NSPredicateEditor, ignore rows with no search terms? 【发布时间】:2010-01-13 18:06:17 【问题描述】:

我马上说我是一个没有经验的 Cocoa 程序员,如果我的问题在文档中得到了解答,我只是错过了它,或者我不明白 NSPredicateEditor 的工作原理,我深表歉意。但是,我确实尝试在文档中搜索并使用 Google 搜索,但收效甚微。因此,我向您提出这个问题。

我正在尝试使用 NSPredicateEditor 过滤基于核心数据的表视图。通过创建 NSCompoundPredicate,过滤工作正常,就基于各种标准的行过滤而言。但是,当谓词编辑器中的一行在其搜索字段中没有文本时,返回的 NSPredicate 类似于

dataName CONTAINS[cd] ""

...不匹配任何核心数据记录——不是我想要的。如果该行中的搜索字段为空白,则基本上我根本不希望它过滤我的数据集。

那么我的问题是,忽略谓词的这些部分的最简单/最佳解决方案是什么?我最初的想法是用(NSPredicate *)predicateForRow:(NSInteger)row 逐行解析NSPredicateEditor 值并自己重建谓词,忽略试图匹配"" 的行,但这似乎不必要地麻烦。将最终的 NSCompoundPredicate 与 - (NSArray *)subpredicates 分开并以这种方式编辑它似乎也可能我采取了错误的策略。有没有更优雅的方法来做到这一点?

*明确地说,我正在考虑编辑谓词的副本,然后将其传递给我的表格视图的控制器,而不是实际编辑当前存储在 NSPredicateEditor 中的初始谓词。

【问题讨论】:

【参考方案1】:

看起来您应该能够继承 NSPredicateEditor 并覆盖 predicateForRow:(在 NSPredicateEditor 的超类 NSRuleEditor 中声明)并在那里进行替换。您基本上只需调用 super 的实现,然后检查谓词并在必要时返回一个新创建的谓词。

【讨论】:

【参考方案2】:

我认为,Brian 的想法是正确的,但是 Snow Leopard 下的 NSPredicateEditor 不会调用 -predicateForRow: 来生成它的谓词。您需要覆盖更高级别的 -predicate 方法,但检查谓词结构并删除与 nil 或空字符串 constantValue 的任何比较仍然相当简单。

【讨论】:

以上是关于NSPredicateEditor,忽略没有搜索词的行?的主要内容,如果未能解决你的问题,请参考以下文章

忽略查询中的mysql全文停用词

如何仅从 URL 中获取搜索词,忽略多个分隔符

关闭 NSPredicateEditor 动画

NSPredicateEditor 只是不会出现

NSPredicateEditor 不调整 NSTextField 的大小

iOS 上是不是存在类似 NSPredicateEditor 的东西?