1

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

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

dataName CONTAINS[cd] ""

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

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

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

4

2 回答 2

1

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

于 2010-01-13T19:04:16.033 回答
0

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

于 2010-01-15T23:19:20.590 回答