2011-12-02 16 views
5

kakao definiuje klasy predykatywne (NSPredicate, NSExpression, itd.), Które „zapewniają ogólne sposoby określania zapytania w kakao”Predicate Programming. Ten zestaw lekcji opisuje to, czego potrzebuję, ale z jednym krótkim krokiem: chciałbym dodatkowych operatorów.Utworzenie podklasy NSPredicate dodać operatora

NSComparisonPredicate obsługuje już 14 operatorów (NSPredicateOperatorType), ale chciałbym dodać, powiedzmy, operatorzy doczesne ... lub podmioty do reprezentowania rzeczy, takich jak:

  • "zmiennejma przynajmniejNwpisy "(operator binarny)
  • " zmiennamawartośćdo co najwyżejnkolejnych dni "(operator trójskładnikowy)

Oczywiście byłoby potrzebne w celu wykonania tych siebie i modelu danych, na którym dane zapytań będą musieli wspierać tych operatorów. Ale czy istnieje sposób na jego wdrożenie i korzystanie z istniejących klas NSPredicate? Ponieważ operatorzy byli zdefiniowani jako enum, wątpię, czy mogę rozszerzyć ten front. Czy też całkowicie brakuje mi tej łodzi ?!

Odpowiedz

7

HavingspentalotoftimeplayingaroundwithNSPredicate, nie jestem pewien, że to jest największy pomysł.

Teoretycznie, chcesz podklasy NSPredicate utwórz nowy inicjator i właściwości, a następnie zastąpić metodę -evaluateWithObject:substitutionVariables: aby zrobić swoje porównanie niestandardową.

Praktycznie jest to znacznie trudniejsze.

Można rozważyć użycie zamiast tego FUNCTION(). I wrote a blog post about FUNCTION jakiś czas temu i jak to działa z NSExpression, a zatem z NSPredicate. Osobiście pewnie bym tak postąpił, ponieważ wtedy nadal można użyć składni +predicateWithFormat:, aby utworzyć NSPredicate. Utworzenie podklasy w celu dodania operatora z konieczności uniemożliwi korzystanie z wbudowanego analizatora składni.

+0

Mam dużo do zrobienia! Dziękuję Ci! :) –

Powiązane problemy