我已经看到每个在带有关系的查询中起作用的谓词在开头都包含单词ANY或ALL(即:ANY tags.name LIKE [c]“car”),事实是,如果我删除它(即:tags.name LIKE [c]“car”),结果是错误的,或者我收到类似这样的消息:无法对对象进行正则表达式匹配。
由于我正在使用NSPredicateEditor,因此它们不会启动我的查询,因此它始终会失败。 返回的谓词总是像第二个例子(没有任何或全部)。
我是否必须继承NSPredicateRowTemplateEditor,以便在我的谓词中添加ANY或ALL,或者是他们的另一种方式?
与日期相同...我的日期以这种格式保存:YYYY-MM-DD HH:mm:ss,但NSPredicateEditor使用DD / MM / YYYY,所以每次我尝试日期比较时,它不起作用。我是否还必须继承RowEditor,以便更改日期格式?
谢谢。
答案 0 :(得分:0)
你走了:
class RowTemplateRelationshipAny: NSPredicateEditorRowTemplate {
override func predicate(withSubpredicates subpredicates: [NSPredicate]?) -> NSPredicate{
let predicate: NSComparisonPredicate = super.predicate(withSubpredicates: subpredicates) as! NSComparisonPredicate
let newPredicate = NSComparisonPredicate(leftExpression: predicate.leftExpression, rightExpression: predicate.rightExpression, modifier: .any, type: predicate.predicateOperatorType, options: predicate.options)
return newPredicate
}
}
class RowTemplateRelationshipAll: NSPredicateEditorRowTemplate {
override func predicate(withSubpredicates subpredicates: [NSPredicate]?) -> NSPredicate{
let predicate: NSComparisonPredicate = super.predicate(withSubpredicates: subpredicates) as! NSComparisonPredicate
let newPredicate = NSComparisonPredicate(leftExpression: predicate.leftExpression, rightExpression: predicate.rightExpression, modifier: .all, type: predicate.predicateOperatorType, options: predicate.options)
return newPredicate
}
}
只需将IB中的行模板类更改为RowTemplateRelationshipAny或RowTemplateRelationshipAll。