Невозможно извлечь из coreData, используя Predicate as String? - PullRequest
0 голосов
/ 06 июня 2018

Я не могу получить данные, используя строку в качестве прямого аргумента NSPredicate.Есть ли разница между этими двумя значениями:

//Working case
fetchRequest.predicate = NSPredicate(format: "role == %@","GK")

В приведенном выше случае я могу получить данные с помощью предиката.

//Not Working
predicateString = String(format:"role == %@","GK")
fetchRequest.predicate = NSPredicate(format: predicateString)

Здесь я не могу получить данные,

Единственное различие между двумя вышеупомянутыми случаями состоит в том, что я использую переменную String для определения предиката.Что здесь не так?

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Формат NSPredicate следующий, где он ожидает формат, и формат содержит эквалайзер.

    NSPredicate(format: <String>, <args: CVarArg...>)

    let predicate1 = NSPredicate(format: "role == %@", "GK")

Здесь, если вы проверите predicate1.predicateFormat, товы получите:

"role == \" GK \ "" ,

, которые уравнивают роль со строкой "GK" и возвращают результат в array.

Но для,

    let predicateString = String(format:"role == %@","GK")
    let predicate2 = NSPredicate(format: predicateString)

Вы заменили эквалайзер простой строкой, которая ничего не возвращает.Вы можете проверить с помощью predicate1.predicateFormat, который вернет:

"role == GK"

Здесь вы можете использовать "role == 'GK'", если хотите использовать строку.

Надеюсь, это поможет.

0 голосов
/ 06 июня 2018

Когда% @ заменяется на строковую переменную, когда создается экземпляр NSPredicate, строковая переменная автоматически окружается кавычками, поэтому в вашем примере предикат становится role == 'GK'

Если вы хотите использовать String (формат:...) вам нужно самим добавлять кавычки, но, по моему мнению, лучше использовать NSPredicate (format: ...) напрямую, чтобы избежать подобных проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...