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
(这通常是定位核心数据提取问题的好方法)。