Ответ 1
Если formUUID
- это NSString
или Swift String
, тогда вы должны использовать
%@
placeholder:
let resultPredicate2 = NSPredicate(format: "formUUID = %@", formUUID)
У меня есть объект Core Data, и у меня есть 2 Fieds (один String (GUID) и один Int, который я хочу использовать в качестве фильтра)
Итак, в SQL это будет "SELECT * FROM Answers WHERE qIndex = 1 И GUID = '88bfd206-82fb-4dd0-b65d-096f8902855c'
Ive попробовал это с Core Data, но я не могу фильтровать его со значением строки.
Вот мой код
var request = NSFetchRequest(entityName: "Answers")
request.returnsObjectsAsFaults = false;
let resultPredicate1 = NSPredicate(format: "qIndex = %i", qIndex)
let resultPredicate2 = NSPredicate(format: "formUUID = %s", formUUID)
var compound = NSCompoundPredicate.andPredicateWithSubpredicates([resultPredicate1, resultPredicate2])
request.predicate = compound
var results:NSArray = context.executeFetchRequest(request, error: nil)
Любые идеи, что я делаю неправильно? С одним кодом и фильтром для 2 Целочисленных значений он отлично работает.
Спасибо в Advance
Если formUUID
- это NSString
или Swift String
, тогда вы должны использовать
%@
placeholder:
let resultPredicate2 = NSPredicate(format: "formUUID = %@", formUUID)
Это не точный ответ на ваш вопрос, но проблема теперь может возникнуть с вашим кодом:
В последней версии XCode вы должны теперь развернуть предикат, например:
var compound = NSCompoundPredicate.andPredicateWithSubpredicates([predicate1!, predicate2!])
потому что инициализатор NSPredicate теперь возвращает NSPredicate? тип.
Вместо того, чтобы беспокоиться о преобразованиях %@
, а затем составляя предикаты AND
, вы можете использовать PredicatePal framework:
let compound = *(Key("qIndex") == qIndex && Key("formUUID") == formUUID)
Предполагая, что qIndex
и formUUID
являются правильным типом, Swift автоматически выведет правильные типы для объектов Key
.