2009-09-12 50 views
2

我已经看到,在关系查询中工作的每个谓词都包含开头的单词ANY或ALL(即:ANY tags.name LIKE [c]“car”),事实是,如果我删除它(即:tags.name LIKE [c]“car”),结果是错误的或者我得到这样的消息:无法在对象上执行正则表达式匹配。NSPredicateEditor和关系

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

我是否必须继承NSPredicateRowTemplateEditor,才能将自己的ANY或ALL添加到我的谓词中,还是另一种方式?

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

谢谢。

+0

在这里找到答案: http://stackoverflow.com/questions/210735/automatically-generated-predicate-row-templates-for-to-many-key – gertiMN 2012-02-18 17:42:07

回答

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。