Может ли NSPredicate использовать поиск без учета регистра при сравнении Core Data IN?(Свифт 4) - PullRequest
0 голосов
/ 04 марта 2019

В моем случае у меня есть объект в Core Data с полем id, которое является строкой.Поле заполняется несколькими клиентами на разных платформах и должно быть GUID / UUID.В идеале это всегда должен быть верхний регистр, но не все реализации клиента делают это, и код для их хранения не позаботился об этом.Давайте пока проигнорируем очевидную ошибку архитектуры.Что мне нужно, так это способ искать их без учета регистра.Сейчас я просто извлекаю все из хранилища, а затем фильтрую их, используя функцию фильтра массива Swift.Это работает, но неэффективно, и когда набор данных становится большим, ему потребуется много оперативной памяти.Я попытался использовать предикат вроде

fetchRequest.predicate = NSPredicate(format: "someId IN [cd] %@", ids)

Где ids - это массив строк.Это не работаетМожет ли это быть решено с помощью предиката с блоком?Любые другие решения?

1 Ответ

0 голосов
/ 04 марта 2019

Спасибо Martin R за ваш комментарий, он привел меня к решению, которое сработало для меня.Я закончил с этим решением.Это не совсем то, что я хотел, но, зная, что в массиве ids редко будет больше 10 записей, он будет делать это сейчас, так как, по крайней мере, решает проблему с памятью.Надеемся, что Swift и Core Data обеспечат лучшее решение в будущем.

var predicates = [NSPredicate]()

for id in idList
{
     predicates.append(NSPredicate(format: "temporaryId LIKE[c] %@", id))
}

fetchRequest.predicate = NSCompoundPredicate(orPredicateWithSubpredicates: predicates)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...