2

我已经看到,在具有关系的查询中工作的每个谓词在开头都包含单词 ANY 或 ALL(即:ANY tags.name LIKE[c] "car"),事实是,如果我删除它(即: tags.name LIKE[c] "car"),结果错误或者我收到这样的消息:Can't do regex matching on object。

由于我使用的是 NSPredicateEditor,它们不是启动我的查询的任何或全部,所以它总是失败。返回的谓词总是像第二个例子(不是 ANY 或 ALL)。

我是否必须继承 NSPredicateRowTemplateEditor,以便在我的谓词中添加自己的 ANY 或 ALL,或者是他们的另一种方式?

与日期相同...我的日期以这种格式保存:YYYY-MM-DD HH:mm:ss,但是 NSPredicateEditor 使用 DD/MM/YYYY,所以每次我尝试日期比较时,它都不起作用. 为了更改日期格式,我是否还必须继承 RowEditor?

谢谢你。

4

1 回答 1

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。

于 2016-12-08T18:15:46.847 回答