2016-07-19 12 views
0

Ich möchte eine Telefonnummer Suche in SQLite db tun. Die Telefon-Tabelle hat ein Zahlenfeld, das einen String-Wert enthält (zB: +1 (2-34) 56-78).Coredata Abrufanforderung mit NSPredate

Wenn der Benutzer den Suchtext als "234" eingibt, muss ich die Telefonnummern mit Ziffern (alle anderen Alphabete oder Sonderzeichen in der gespeicherten Zeichenfolge eliminierend) mit NSPredate abrufen und mit der eingegebenen Zeichenfolge vergleichen. Sollen wir dies mit einem Prädikat in einer Abrufanforderung tun?

Ich habe versucht, mit folgenden Prädikat und es tut mir das erwartete Ergebnis zurück:

NSPredicate * Prädikat = [NSPredicate predicateWithFormat: @ "contact = null UND UNTERABFRAGE (Telefonliste, $ Telefon, ANY phone.number $ ENTHÄLT [c]% @). @ count> 0 ", searchText];

Gibt es eine Möglichkeit, dies zu tun? Kann ich dafür einen regulären Ausdruck mit nspredicate verwenden?

+0

Hat ein Telefon eine Nummer oder ist die Nummer eine zu-viele-Beziehung? – Willeke

+0

Telefon Tabelle haben zwei Felder: Nummer und Bezeichnung. Ein Kontakt kann viele Telefonnummern haben. Also hier 'phoneList' ist die viele Beziehung des Kontakts zur Telefon-Tabelle. Ich versuche, Kontakte mit der Suchzeichenfolge als Telefonnummer abzurufen. – JamesDon

+0

SUBQUERY und ANY beide behandeln eine zu viele Beziehung. Versuchen Sie das Format '" contactName! = Null AND ANY phoneList.number CONTAINS [c]% @ ", searchText'. – Willeke

Antwort

1

NSPredicate unterstützt diese Art des Abgleichs nicht. Ihr Kerndatenmodell sollte Daten enthalten, die Ihre App für die Filterung benötigt. Dies könnte zusätzliche Felder bedeuten, die normalerweise für Benutzer nicht sichtbar sind. Wenn Sie Zahlen ohne Berücksichtigung nicht-numerischer Zeichen abgleichen müssen, sollten Sie ein Feld hinzufügen, das diese Daten enthält. Wenn die tatsächliche Zeichenfolge +1 (2-34)56-78 ist, fügen Sie ein sekundäres Feld hinzu, in dem Sie 12345678 speichern. Verwenden Sie dieses zusätzliche Feld im Prädikat.

Verwandte Themen