У меня была эта же проблема с одним из моих приложений. В моем случае мне нужно было подписаться на список предикатов, где нужно было найти множество критериев поиска, но предикат поиска или фильтра дал мне большую проблему. Я также попытался:
let word1 = "Mac"
let predicate = NSPredicate(format: "Title CONTAINS %@", word1)
Это работало, но только тогда, когда «word1» было одно слово без пробелов и «Title» был «Список строк» в облаке.
Разъяснения, что я встречал во всех моих исследованиях:
Вы должны использовать термин «я», когда вы создаете предикат и то, что делает он ищет все поля, которые являются для поиска строки , Вот информация, которую я получил от Apple's Website.
Предикаты поддерживает следующие переменные строки подстановки:
Используйте% @ для объектов значений, таких как строки, числа и даты.
Используйте поле% K для названия поля. Эта переменная замещения указывает, что заменяемая строка должна использоваться для поиска имени поля.
За одним исключением оператор CONTAINS может использоваться только для проверки принадлежности к списку. Исключение составляет то, когда вы используете его для выполнения полнотекстовых поисков в сочетании с собственным ключом. Путь к самому ключу приводит к тому, что сервер просматривает поля поиска, доступные для поиска, для указанной строки токена. Например, предикатная строка @ "self contains 'blue'" ищет слово «синий» во всех полях, помеченных для включения в полнотекстовые поиски. Вы не можете использовать собственный ключ для поиска в полях, тип которых не является строкой.
Что я в итоге делаю, что должен быть лучшим способом, мое свойство «Название» по-прежнему является «Строковым списком» в облаке, и в моем коде я сделал массив всех слов в мой поискTerm и с каждым словом в searchTerm я сделал отдельный NSPredicate, и я использовал их как часть NSCompoundPredicate. Затем я добавил NSCompoundPredicate к моей подписке, и это сработало.Вот мой пример:
var searchCriteria: [NSPredicate] = []
for word in searchTerm {
let predicate = NSPredicate(format: "self CONTAINS %@", word)
searchCriteria.append(predicate)
}
let p2 = NSPredicate(format: "Price > %d", minPrice)
let p3 = NSPredicate(format: "Price < %d", maxPrice)
let p4 = NSPredicate(format: "Category == %d", category)
searchCriteria.append(p2)
searchCriteria.append(p3)
searchCriteria.append(p4)
let compoundPredicate = NSCompoundPredicate(andPredicateWithSubpredicates: searchCriteria)
Надеюсь, это поможет. Должен быть лучший способ сделать это, и если кто-нибудь знает, сообщите мне, потому что я понимаю, что нет много хороших объяснений, как делать вещи с CloudKit.
ли 'LIKE' вместо' '== работы? – HAS