Подтвердить что ты не робот

NSPredicate с быстрыми и основными данными

У меня есть объект 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

4b9b3361

Ответ 1

Если formUUID - это NSString или Swift String, тогда вы должны использовать %@ placeholder:

let resultPredicate2 = NSPredicate(format: "formUUID = %@", formUUID)

Ответ 2

Это не точный ответ на ваш вопрос, но проблема теперь может возникнуть с вашим кодом:

В последней версии XCode вы должны теперь развернуть предикат, например:

var compound = NSCompoundPredicate.andPredicateWithSubpredicates([predicate1!, predicate2!])

потому что инициализатор NSPredicate теперь возвращает NSPredicate? тип.

Ответ 3

Вместо того, чтобы беспокоиться о преобразованиях %@, а затем составляя предикаты AND, вы можете использовать PredicatePal framework:

let compound = *(Key("qIndex") == qIndex && Key("formUUID") == formUUID)

Предполагая, что qIndex и formUUID являются правильным типом, Swift автоматически выведет правильные типы для объектов Key.