NSPredicateEditor и отношения - PullRequest
       3

NSPredicateEditor и отношения

2 голосов
/ 12 сентября 2009

Я видел, что каждый предикат, который работает в запросе с отношением, содержит в начале слова ЛЮБОЙ или ВСЕ (т. Е. ЛЮБОЕ теги. Name LIKE [c] "car"), факт, если я удаляю это (то есть: tags.name LIKE [c] "car"), результат неправильный, или я получаю сообщение, подобное этому: Не удается выполнить сопоставление с регулярным выражением для объекта.

Так как я использую NSPredicateEditor, нет НИКАКИХ или ВСЕХ, которые запускают мой запрос, поэтому он всегда терпит неудачу. Возвращенные предикаты всегда похожи на второй пример (без ЛЮБОГО или ВСЕГО).

Должен ли я создавать подкласс NSPredicateRowTemplateEditor, чтобы добавить себя ЛЮБОГО или ВСЕГО в мой предикат, или это другой путь?

То же самое и с датами ... мои даты сохраняются в следующем формате: ГГГГ-ММ-ДД ЧЧ: мм: сс, но NSPredicateEditor использует ДД / ММ / ГГГГ, поэтому каждый раз, когда я пытаюсь сравнить даты, не работает. Должен ли я также создать подкласс RowEditor, чтобы изменить формат даты?

Спасибо.

1 Ответ

0 голосов
/ 08 декабря 2016

Вот, пожалуйста:

class RowTemplateRelationshipAny: NSPredicateEditorRowTemplate {



    override func predicate(withSubpredicates subpredicates: [NSPredicate]?) -> NSPredicate{

        let predicate: NSComparisonPredicate = super.predicate(withSubpredicates: subpredicates) as! NSComparisonPredicate

        let newPredicate = NSComparisonPredicate(leftExpression: predicate.leftExpression, rightExpression: predicate.rightExpression, modifier: .any, type: predicate.predicateOperatorType, options: predicate.options)

        return newPredicate
    }

}

class RowTemplateRelationshipAll: NSPredicateEditorRowTemplate {


    override func predicate(withSubpredicates subpredicates: [NSPredicate]?) -> NSPredicate{

        let predicate: NSComparisonPredicate = super.predicate(withSubpredicates: subpredicates) as! NSComparisonPredicate

        let newPredicate = NSComparisonPredicate(leftExpression: predicate.leftExpression, rightExpression: predicate.rightExpression, modifier: .all, type: predicate.predicateOperatorType, options: predicate.options)

        return newPredicate
    }

}

Просто измените класс шаблона строки в IB на RowTemplateRelationshipAny или RowTemplateRelationshipAll.

...