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 在优化此类查询方面的效果如何),但要忽略查询中的一个属性,您可能是指

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

因此如果相应的标志为零,则子表达式的计算结果为 TRUE。

A better way would be to build an array of predicates with the queries that you actually need and then use

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