2012-09-17 2 views
0

기본적으로 고객 정보가있는 코어 데이터 데이터베이스가 있습니다. 검색 창도 있습니다. 그래서 이름, 주소 등을 검색할지 선택할 수 있습니다 .etc. 이 너무여러 검색 옵션, 핵심 데이터 fetchrequest xcode

[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'etc.etc : 여기

내가 지금 가지고있는 코드입니다. 정수입니다. 내가 말한 경우

_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을 기준으로 반환됩니다. 이것은 정신 나간다. 그리고 나는 내 머리 점을 맑게하기 위해 점심을 먹으려 고하고있다. 아무도 아이디어가 있다면 크게 평가할 것이다. :)

답변

1

나는 그것이 실제로 작동하는지 효과적인 코어 데이터/SQLite는 당신이 아마 해당 플래그가 0 인 경우 표현식이 true로 평가 그래서

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

을 의미) 이러한 쿼리를 최적화로하지만, 쿼리에서 하나 개의 속성을 무시.

더 좋은 방법은 내가 맨 손으로, 두 가지 방법을 시도 할 것이다 당신이 실제로 필요로하는 쿼리 술어의 배열을 구축하고

[NSCompoundPredicate andPredicateWithSubpredicates:arrayOfPredicates]; 
+0

나는 여전히이 프로그램 당황 할지도 모르 비교적 새로운 해요 사용하는 것 나 : 그것에 대해 생각하는 것은 OR 명령이 D == 0의 모든 값을 반환한다는 것을 의미하지 않을까요? – Craig

+0

또한, nscompoundpredicate를 사용하는 방법을 완전히 이해할 수 있는지 확신 할 수 없지만, 사과 개발자 문서를보고 있습니다. 그러나 분당 점점 더 어리 석고 있습니다. < – Craig

+1

@Craig :'_searchNameOnly == 0' 인 경우 '(CompanyName은 [cd] % @ OR % d == 0을 포함합니다.)'는 TRUE로 평가되지만 다른 모든'(XXX에는 [%]가 포함되어 있습니다. 나는 이것이 당신이 원하는 것이라고 생각했습니다. 당신이 그것을 시도하고 그것이 작동하지 않는 경우 자세한 정보를 제공 할 수 있습니다. –