假设我有一个实体Fragment
,它有一个属性'text'是一个字符串,我想查询Fragment
长度为5的text
列表:
[NSPredicate predicateWithFormat:@"position == %@ AND text.length == %d", pos, 5];
它不起作用(即返回没有结果),但是如果我在查询中删除text.length它可以工作并且我确定有长度为5的文本,那么我需要将它更改为什么? / p>
谢谢!
答案 0 :(得分:17)
NSPredicate
中的字符串没有长度属性。请改用正则表达式。
您的谓词应如下所示:
[NSPredicate predicateWithFormat:@"position == %@ AND text MATCHES %@", pos, @".{5}"];
答案 1 :(得分:0)
我认为它将text.length视为一种关系。尝试仅使用位置设置谓词,然后执行循环查找text.length == 5.
答案 2 :(得分:0)
您无法在核心数据提取请求中使用length
之类的Objective-C函数。但是你
可以替换为" LIKE"运算符,它执行简单的模式匹配:
[NSPredicate predicateWithFormat:@"text LIKE %@", @"?????"];
一个有趣的观点是,Core Data不会抛出异常或返回错误,
但只是忽略了length
方法,即它只是使用谓词"text = '5'
。
通过设置启动参数
-com.apple.CoreData.SQLDebug 3
(这通常是定位Core Data获取问题的好方法)。