如何在Objective C中使用NSPredicate指定范围

neo*_*neo 4 sqlite objective-c nspredicate ios

我想通过指定范围来查询sqllite表.所以这就像给我所有id列在3000到3010之间的记录.

我尝试了Apple推荐的产品,但它没有用.这是我尝试过但失败了.

NSPredicate *betweenPredicate =
[NSPredicate predicateWithFormat: @"attributeName BETWEEN %@", @[@1, @10]];
Run Code Online (Sandbox Code Playgroud)

我有两个名为start和end的字符串.我更新了Apple的示例如下.

NSPredicate *betweenPredicate =
[NSPredicate predicateWithFormat: @"%@ BETWEEN %@", columnName, @[start,end]];
Run Code Online (Sandbox Code Playgroud)

当我使用上面的谓词执行executeRequest时,我得到0条记录,即使该表具有与谓词匹配的记录.有人能说出错的地方吗?

Mar*_*n R 9

您必须使用%K属性名称的格式说明符:

[NSPredicate predicateWithFormat: @"%K BETWEEN %@", columnName, @[start,end]];
Run Code Online (Sandbox Code Playgroud)

如果这不起作用(我从来没有使用"BETWEEN"用于核心数据获取请求),您可以用等效谓词替换它

[NSPredicate predicateWithFormat: @"%K >= %@ AND %K <= %@",
         columnName, start, columnName, end];
Run Code Online (Sandbox Code Playgroud)