所以我是iOS开发的新手,我试图在我的NSFetchRequest()中添加一个谓词,以过滤掉位于用户当前位置附近的项目。但是,它似乎没有工作,NSFetchRequest返回空。
let fetchRequest = NSFetchRequest()
fetchRequest.predicate = NSPredicate(format: "itemLatitude BETWEEN {%d, %d}", (latitude-10), (latitude+10))
如果我删除谓词,查询将返回所有项目,因此fetch可以正常工作,但不会显示谓词。这里可能存在一些非常基本的错误,我非常感谢任何帮助。
答案 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}
并且是一个更明确的答案。
干杯!