CoreData谓词:string属性的长度?

说如果我有一个实体Fragment ,它有一个属性“文本”,这是一个string,我想查询其text长度为5的Fragment的列表:

 [NSPredicate predicateWithFormat:@"position == %@ AND text.length == %d", pos, 5]; 

它不起作用(即没有返回结果),但如果我删除查询中的text.length它的工作,我敢肯定有长度为5的文本,所以我需要改变它?

谢谢!

NSPredicate没有string的长度属性。 改用regex。 你的谓词应该如下所示:

 [NSPredicate predicateWithFormat:@"position == %@ AND text MATCHES %@", pos, @".{5}"]; 

我认为这是一个关系text.lengh。 尝试只设置一个谓词与位置,然后做一个循环寻找text.length == 5。

Core Data获取请求中不能使用Objective-C函数,如length 。 但是你可以用“LIKE”运算符来replace它,这个运算符做了一个简单的模式匹配:

 [NSPredicate predicateWithFormat:@"text LIKE %@", @"?????"]; 

有趣的一点是,Core Data不会抛出exception或返回错误,而只是忽略了length方法,即它只是使用谓词"text = '5'来代替。设置启动参数

 -com.apple.CoreData.SQLDebug 3 

(这通常是定位核心数据提取问题的好方法)。