2011-05-31 210 views
3

我試圖搜索多個字段。例如:NSPredicate多字段搜索

[NSPredicate predicateWithFormat:@"(name title contains[cd] %@) AND (title contains[cd] %@", self.searchBar.text]; 

搜索名稱字段或標題字段。

此外,如果有人知道通配符搜索會是什麼樣子,我也會很感激。

我想:

[NSPredicate predicateWithFormat:@"* contains[cd] %@", self.searchBar.text]; 

我的錯誤代碼:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse the format string "(name contains[cd] %@) OR (title contains[cd] %@"' 

回答

1

首先,你必須指定所有屬性來檢查,因爲沒有物業沒有固定的或普遍的名單,並在Objective-C在屬性和任何其他方法之間沒有真正的語義區別。

第二關,檢查多個屬性,看看它們是否包含搜索字符串,你應該使用OR,不AND,因爲搜索是滿意的,如果性質的任何匹配,不所有

否則,您必須語法正確出現(我在第一subpredicate假設name title,就是要公正name

+0

我試過了這個語法,它和OR和AND都崩潰了。名稱和標題是一個錯字。感謝您的答覆。 – hanumanDev 2011-05-31 22:27:51

+0

對於每個說明符序列(例如'%@'),即使值相同,也必須提供一個值。所以你需要在你的格式字符串後面加上'self.searchBar.text'兩次。此外,您需要關閉格式字符串中的第二個括號(即用')結束以平衡第二個(')。 – 2011-06-01 14:43:57

0

不知道是否還有人讀這篇文章,但我發現你的問題。你在第二個謂詞中缺少結尾「)」。下面是正確的代碼:

[NSPredicate predicateWithFormat:@"(name title contains[cd] %@) AND (title contains[cd] %@)", self.searchBar.text]; 

編輯:測試此之後,我注意到有兩個格式說明工作正常使用一種格式參數(見上面的代碼)。當我添加第三個謂詞和格式說明符(只有一個格式參數)時,它崩潰了。無論如何,您應該始終擁有相同數量的格式說明符和格式參數。