0

さて、基本的に私は顧客情報を含むコアデータデータベースを持っています。検索バーもあります。名前や住所などを検索するかどうかを選択できるようにしたいです。

これが私が現在持っているコードです:

 [sosdRequest setPredicate:[NSPredicate predicateWithFormat:@"(AccountCode contains[cd] %@           
AND %d>0) AND (CompanyName contains[cd] %@ AND %d>0) AND (Address1 contains[cd] %@ AND %d>0) 
AND (Address2 contains[cd] %@ AND %d>0) AND (Town contains[cd] %@ AND %d>0)  AND (County 
contains[cd] %@ AND %d>0) AND (Postcode contains[cd] %@ AND %d>0) AND (UserField01 
contains[cd] %@ AND %d>0) AND (UserField02 contains[cd] %@ AND %d>0) AND (UserField03 
contains[cd] %@ AND %d>0) AND (UserField04 contains[cd] %@  AND %d>0) AND (UserField05 
contains[cd] %@ AND %d>0)",searchBar.text, _searchAccountCodeOnly, searchBar.text, 
_searchNameOnly, searchBar.text, _searchAddress, searchBar.text, _searchAddress, 
searchBar.text, _searchTown, searchBar.text, _searchCounty, searchBar.text, _searchAddress, 
searchBar.text, _searchUser1, searchBar.text, _searchUser2, searchBar.text, _searchUser3, 
searchBar.text, _searchUser4, searchBar.text, _searchUser5]];

したがって、これを使用すると、'_searchAddress''_searchNameOnly'などになります。整数です。私が言ったら

_searchAccountCodeOnly = 0;
_searchNameOnly = 0;
_searchNumbers = 0;
_searchTown =  0;
_searchCounty = 0;
_searchAddress = 2;
_searchContact = 0;
_searchUser1 = 0;
_searchUser2 = 0;
_searchUser3 = 0;
_searchUser4 = 0;
_searchUser5 = 0;

私の検索は引き続きCompanyNameに基づいて返されます。これは私を狂気に駆り立てています、そして私は私の頭を少しクリアするために私の昼休みに走ろうとしていますが、誰かが何かアイデアを持っているならそれは大いにありがたいです:)

4

1 に答える 1

1

それが実際に機能するかどうか(そしてCore Data / sqliteがそのようなクエリを最適化するのにどれほど効果的か)はわかりませんが、クエリの1つの属性を無視することはおそらく意味します

(CompanyName contains[cd] %@ OR %d == 0)

対応するフラグがゼロの場合、部分式がTRUEと評価されるようにします。

より良い方法は、実際に必要なクエリを使用して述語の配列を作成してから使用することです。

[NSCompoundPredicate andPredicateWithSubpredicates:arrayOfPredicates];
于 2012-09-17T12:14:16.020 に答える