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,忽略没有搜索词的行?的主要内容,如果未能解决你的问题,请参考以下文章