Я создаю поиск NSPredicate
, используя строку произвольного формата.Иногда синтаксис этой строки неправильный, и когда я выполняю выборку, используя NSFetchRequest
с этим предикатом, я получаю NSInvalidArgumentException
, например, когда путь ключа неверен.Я бы предпочел проверить этот предикат (вызвать метод, который возвращает YES
, если формат в порядке), чем выдать исключение, которое приводит к сбою моего приложения.Что я могу сделать?
Чтобы перефразировать запрос в простой вопрос:
Можно ли проверить предикат без потенциального сбоя приложения?
Вот пример кода в Swift:
let text = "price > 0.1" // ok, no syntax error
let text = "price > 'abc'" // error
let predicate = NSPredicate.init(format: text, argumentArray: [])
let request = NSFetchRequest<Fruit>.init(entityName: "Fruit")
request.predicate = predicate
request.fetchLimit = 1
let fruit = try myContext.fetch(request) as [Fruit] // exception thrown here that crashes app
// sometimes the exception can be caught with an obj-c try/catch
// sometimes it can't be caught, and causes program to terminate
// CAN WE HAVE A SOLUTION THAT NEVER CAUSES A CRASH ?