2016-02-03 4 views
0

Итак, у меня есть следующий код, который дает мне исключение NSInvalidArgumentException.NSInvalidArgumentException при вызове NSPredicate

let test = "AND ANY typeId = 25" 
fetchRequest.predicate = NSPredicate(format: "latitude BETWEEN {%f,%f} AND longitude BETWEEN {%f,%f} %@", (latitude-0.10), (latitude+0.10), (longitude-0.10), (longitude+0.10), test) 

Однако, если я удаляю элемент% @ и test, вызов проходит через штраф. Что мне здесь не хватает? afaik, test - строка, а% @ - это то, что я должен использовать для ссылки на строковый объект?

Спасибо!

ответ

1

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Predicates/Articles/pSyntax.html говорит

Важно: Используйте% @ спецификатор формата только для представления выражения. Не используйте его для представления целого предиката. Если вы попытаетесь использовать спецификатор формата для представления всего предиката, система вызывает исключение.

Вы могли бы вместо того, чтобы попытаться

let predicate = NSPredicate(format: "latitude BETWEEN {\(latitude-0.1), 
\(latitude+0.1)} AND longitude BETWEEN {\(longitude-0.1),\(longitude+0.1)} 
\(test)") 
+0

Это действительно решить эту проблему! Благодаря :) – ardevd