2016-07-19 4 views
0

sqlite dbで電話番号の検索を行います。電話テーブルには、文字列値を保持する数字フィールドがあります(例:+1(2-34)56-78)。NSPredicateを使用したCoredataフェッチ要求

ユーザが検索テキストを「234」と入力した場合、NSPredicateを使用して桁数のみの電話番号を取得する必要があります(他のすべてのアルファベットや特殊文字は保存されません)。 フェッチ要求の述語を使用してこれを行うか?

私は、次の述語をしようと、それは私に期待した結果を返すdoesntの:[NSPredicate predicateWithFormat =

NSPredicate *述語を:! "CONTACTNAME = nullのサブクエリ(PhoneListとして、$電話@、ANYの$ phone.numberはCONTAINS [c]%@)。@ count> 0 "、searchText];

これを行う方法はありますか?これに対してnspredicateで正規表現を使用できますか?

+0

電話機には番号が1つありますか、または番号と多対多の関係はありますか? – Willeke

+0

電話テーブルには、番号とラベルの2つのフィールドがあります。連絡先には電話番号がたくさんある場合があります。だからここで 'phoneList'は電話テーブルへの連絡先の多くの関係です。私は電話番号として検索文字列を持つ連絡先を取得しようとしています。 – JamesDon

+0

SUBQUERYとANYはどちらも多対多の関係を処理しています。 '' contactName!= nullの形式を試してみてください。また、phoneList.numberにはCONTAINS [c]%@ "、searchText'が含まれています。 – Willeke

答えて

1

NSPredicateは、このようなマッチングをサポートしていません。あなたのコアデータモデルには、アプリがフィルタリングに必要なデータが含まれている必要があります。これは、通常はユーザーには見えない余分なフィールドを意味する場合があります。数値以外の文字に関係なく数字を照合する必要がある場合は、そのデータを含むフィールドを追加する必要があります。実際の文字列が+1 (2-34)56-78の場合は、12345678を格納するセカンダリフィールドを追加します。この余分なフィールドは、述部で使用します。

関連する問題