NSPredicateEditor,忽略没有搜索条件的行?

时间:2010-01-13 18:06:18

标签: cocoa ignore nspredicate nspredicateeditor

我会说我是一个没有经验的Cocoa程序员,如果我的问题在某种程度上在文档中被回答而且我只是错过了,或者我对NSPredicateEditor的工作方式有些不了解,我很抱歉。但是,我确实试图在文档中搜索并用谷歌搜索,效果不大。因此,我将问题提交给你。

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

的行。
dataName CONTAINS[cd] ""

...没有核心数据记录 - 不是我想要的。如果该行中的搜索字段为空,我基本上不希望它过滤我的数据集。

我的问题是,忽略这些谓词部分的最简单/最佳解决方案是什么?我最初的想法是用(NSPredicate *)predicateForRow:(NSInteger)row逐行解析NSPredicateEditor值并自己重建谓词,忽略试图匹配""的行,但这似乎不必要地繁琐。将最终的NSCompoundPredicate与- (NSArray *)subpredicates分开并以这种方式进行编辑似乎也许我正在采取错误的方法。有更优雅的方式吗?

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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