我马上就说我是一个没有经验的Cocoa程序员,如果在文档中以某种方式回答了我的问题,而我只是想念它,或者我对NSPredicateEditor的工作方式不了解,我深表歉意。但是,我确实尝试在文档中搜索并用谷歌搜索,效果不大。因此,我将这个问题带给您。
我正在尝试使用NSPredicateEditor筛选基于Core Data的表视图。通过创建NSCompoundPredicate,就可以基于各种条件对行进行过滤,过滤效果很好。但是,当谓词编辑器中的行的搜索字段中没有文本时,返回的NSPredicate类似于
dataName CONTAINS[cd] ""
...与任何核心数据记录都不匹配-不是我想要的。如果该行中的搜索字段为空,则基本上我根本不希望它过滤我的数据集。
那么我的问题是,忽略谓词这些部分的最简单/最佳解决方案是什么?我最初的想法是用
(NSPredicate *)predicateForRow:(NSInteger)row
逐行解析NSPredicateEditor值,然后自己重建谓词,而忽略试图匹配""
的行,但这似乎不必要地麻烦。将最终的NSCompoundPredicate与- (NSArray *)subpredicates
分开并以这种方式进行编辑似乎也好像我采取了错误的方法。有没有更优雅的方法可以做到这一点?*为了清楚起见,我正在考虑编辑谓词的副本,然后将其传递给表视图的控制器,而不是实际编辑当前存储在NSPredicateEditor中的初始谓词。
最佳答案
看来您应该能够继承NSPredicateEditor的子类并覆盖predicateForRow:
(在NSPredicateEditor的超类NSRuleEditor中声明),然后在那里进行替换。您基本上只会调用super的实现,然后检查谓词并在必要时返回一个新创建的谓词。
关于cocoa - NSPredicateEditor,忽略没有搜索项的行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2059060/