繁体   English   中英

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

[英]NSPredicateEditor, ignore rows with no search terms?

我马上就说我是一个没有经验的Cocoa程序员,如果在文档中以某种方式回答了我的问题,而我只是想念它,或者我对NSPredicateEditor的工作方式不了解,我深表歉意。 但是,我确实尝试在文档中搜索并用谷歌搜索,效果不大。 因此,我将这个问题带给您。

我正在尝试使用NSPredicateEditor筛选基于Core Data的表视图。 通过创建NSCompoundPredicate,就可以基于各种条件对行进行过滤,过滤效果很好。 但是,当谓词编辑器中的行的搜索字段中没有文本时,返回的NSPredicate类似于

dataName CONTAINS[cd] ""

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM