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

Cocoa NSPredicateEditor,是否忽略没有搜索词的行?,cocoa,ignore,nspredicate,nspredicateeditor,Cocoa,Ignore,Nspredicate,Nspredicateeditor,我会马上说,我是一个没有经验的Cocoa程序员,如果我的问题在文档中得到了某种程度的回答,而我只是错过了它,或者NSPredicateEditor的工作方式中有一些我不理解的地方,我表示歉意。然而,我确实尝试在文档中搜索,并在谷歌上搜索,但收效甚微。因此,我向你们提出这个问题 我正在尝试使用NSPredicateEditor筛选基于核心数据的表视图。通过创建NSCompoundPredicate,根据各种条件进行行过滤,过滤效果良好。但是,当谓词编辑器中的一行在其搜索字段中没有文本时,返回的NS

我会马上说,我是一个没有经验的Cocoa程序员,如果我的问题在文档中得到了某种程度的回答,而我只是错过了它,或者NSPredicateEditor的工作方式中有一些我不理解的地方,我表示歉意。然而,我确实尝试在文档中搜索,并在谷歌上搜索,但收效甚微。因此,我向你们提出这个问题

我正在尝试使用NSPredicateEditor筛选基于核心数据的表视图。通过创建NSCompoundPredicate,根据各种条件进行行过滤,过滤效果良好。但是,当谓词编辑器中的一行在其搜索字段中没有文本时,返回的NSPredicate与

dataName CONTAINS[cd] ""
…与任何核心数据记录都不匹配-这不是我想要的。如果该行中的搜索字段为空,我根本不希望它过滤我的数据集

那么我的问题是,忽略谓词的这些部分最简单/最好的解决方案是什么?我最初的想法是使用
(NSPredicate*)predicateForRow:(NSInteger)row
逐行解析nspredicateditor值,然后自己重新生成谓词,忽略试图匹配
”的行,但这似乎是不必要的麻烦。将最后一个NSCompoundPredicate与
-(NSArray*)子预测分开,并以这种方式编辑它,似乎我采取了错误的策略。有没有更优雅的方法


*为了清楚起见,我正在考虑编辑谓词的副本,然后将其传递给表视图的控制器,而不是实际编辑当前存储在NSPredicateEditor中的初始谓词。

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

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

我认为Brian的想法是正确的,但是Snow Leopard下的
NSPredicateEditor
不会调用
-predicateForRow:
来生成其“谓词”。您需要重写更高级别的
-predicate
方法,但检查谓词结构并删除与
nil
或空字符串
constantValue

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