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

我想通过指定一个范围来查询sqllite表。 所以就像给我所有logging的列号在3000到3010之间。

我尝试了苹果的build议,但没有奏效。 这是我尝试和失败。

NSPredicate *betweenPredicate = [NSPredicate predicateWithFormat: @"attributeName BETWEEN %@", @[@1, @10]]; 

我有2个string叫做开始和结束。 我更新了苹果的例子如下。

 NSPredicate *betweenPredicate = [NSPredicate predicateWithFormat: @"%@ BETWEEN %@", columnName, @[start,end]]; 

当我用上面的谓词executeFetchRequest时,即使表中有匹配谓词的logging,我也会得到0条logging。 有人能指出我出错的地方吗?

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

 [NSPredicate predicateWithFormat: @"%K BETWEEN %@", columnName, @[start,end]]; 

如果这不起作用(我从来没有使用“BETWEEN”获取核心数据获取请求),那么可以用等价的谓词来replace它

 [NSPredicate predicateWithFormat: @"%K >= %@ AND %K <= %@", columnName, start, columnName, end];