Searchfield sinnvoll nutzen mit predicates

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Searchfield sinnvoll nutzen mit predicates

    Hallo,

    da ich sonst immer nur Fragen habe, möchte ich auch mal was zum Forum zusteuern und in der Suche hatte ich auch nichts vollständiges gefunden:

    Angenommen, ich habe einen ArrayController an einem TableView mit 2000 "Datensätzen" und Spalten: Name, Vorname, ID und Geburtsdatum.

    Ich kann ein NSSearchField ins Fenster ziehen und Predicate mit dem ArrayController, der das TableView füttert binden, dies ist allen bekannt.

    Für Name und Vorname (NSString) ist der beste Formatstring:

    (Name beginswith[cd] $value) bzw. (Vorname beginswith[cd] $value)

    dann sieht der User, wie sich langsam der gewünschte Name herauskristallisiert.

    Für eine ID (NSNumber) wird es etwas schwieriger, am besten ist:

    ID.stringValue beginswith[cd] $value oder ID.stringValue = $value

    Will man, dass die Suche "freier" ist, ist folgendes sehr gut:

    ID.stringValue beginswith[cd] $value.intValue.stringValue

    dadurch kann man auch 128.2 oder 00128 oder 128shit eingeben, es wird immer die ID 128 gefunden.

    Für NSDate wird es erst einmal schwierig. Hier habe ich folgende Lösung gefunden:

    Ich mache für NSDate eine Kategorie:

    Quellcode

    1. @interface NSDate (NSDateStrAddition)
    2. @property (readwrite, copy) NSString* strDDMMYYYY;
    3. @end


    und

    Quellcode

    1. @implementation NSDate (NSDateStrAddition)
    2. - (NSString*) strDDMMYYYY {
    3. NSDateFormatter* form = [[[NSDateFormatter alloc] init]autorelease];
    4. [form setDateFormat:@"dd.MM.yyyy"];
    5. return [form stringFromDate: self] ;
    6. }
    7. - (void) setStrDDMMYYYY: (NSString*) aStr {
    8. }
    9. @end
    Alles anzeigen


    hier kann man sich natürlich noch auslassen!

    Jetzt ist Folgendes möglich:

    Geburtsdatum.strDDMMYYYY contains[cd] $value

    oder

    Geburtsdatum.strDDMMYYYY beginswith[cd] $value

    Als letztes die Volltextsuche (nur als Anregung):

    (Name contains[cd] $value ) or (Vorname contains[cd] $value ) or (Geburtsdatum.strDDMMYYYY contains[cd] $value ) or (ID.stringValue = $value.intValue.stringValue )

    Ich hoffe, ich haben einigen geholfen, die ähnliche Fragen oder Probleme hatten!


    fiveyears



    PS: Das [cd] heißt nur: egal ob ö oder o und GroßKleinschreibung ist egal - also genau für uns Deutsche

    PS1: die Volltextsuche sollte bei vielen "Datensätzen" nicht als erstes eingestellt sein, da diese Suche schon bei 2000 "Datensätzen" verzögert dargestellt wird

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von fiveyears ()