为什么我的NSPredicate不起作用?

时间:2016-01-17 22:00:52

标签: ios swift

所以我是iOS开发的新手,我试图在我的NSFetchRequest()中添加一个谓词,以过滤掉位于用户当前位置附近的项目。但是,它似乎没有工作,NSFetchRequest返回空。

let fetchRequest = NSFetchRequest()
fetchRequest.predicate = NSPredicate(format: "itemLatitude BETWEEN {%d, %d}", (latitude-10), (latitude+10))

如果我删除谓词,查询将返回所有项目,因此fetch可以正常工作,但不会显示谓词。这里可能存在一些非常基本的错误,我非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

试试这个:

let fetchRequest = NSFetchRequest() fetchRequest.predicate = NSPredicate(format: "itemLatitude BETWEEN %@", [(latitude-10), (latitude+10)])

有关如何使用BETWEEN比较的详细信息,请参阅get_field()" Basic Comparisons"一部分。

否则,您可以像这样编码谓词:

let fetchRequest = NSFetchRequest() fetchRequest.predicate = NSPredicate(format: "itemLatitude>%f AND itemLatitude<%f", (latitude-10), (latitude+10))

答案 1 :(得分:0)

正如@vadian所提到的,谓词的问题似乎在字符串格式中。将%d替换为%f可使其正常运行。但是,我在这里向您介绍一下调​​试此类谓词问题的小提示:

NSPredicate&#39; description方法将返回正在应用的最终谓词的字符串。

NSPredicate(format: "itemLatitude BETWEEN {%f, %f}", (latitude-10), (latitude+10)).description
NSPredicate(format: "itemLatitude BETWEEN {%f, %f}", (latitude-10), (latitude+10)).description

在游乐场中展示

itemLatitude BETWEEN {0, 0}
itemLatitude BETWEEN {13.45, 33.45}

@ ben-messaoud-mahmoud的格式似乎也适合这个谓词:

NSPredicate(format: "itemLatitude BETWEEN %@", [(latitude-10), (latitude+10)]).description

也会有结果:

itemLatitude BETWEEN {13.45, 33.45}

并且是一个更明确的答案。

干杯!