2012-11-05 77 views
1

時候進入我的搜索框關鍵字時我收到此錯誤解析格式字符串nspredicate錯誤:無法使用撇號

終止應用程序由於未捕獲的異常「NSInvalidArgumentException」,理由是:「無法解析格式 字符串「(標題包含並[c]‘HJ’」

我輸入在這種情況下任何字符串(「HJ」),隨後加入含撇號 撇號(或)任何撇號 - 沒有錯誤。

這是我做過什麼:

(void)filter:(NSString*)keyword{ 
    NSString* predicateString = [NSString stringWithFormat:@"(title CONTAINS[c] '%@')", keyword]; 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:predicateString]; 
    self.filteredArray = [self.initialArray filteredArrayUsingPredicate:predicate]; 
} 

正如我所說的,代碼工作如果關鍵字不包含單引號字符。

+0

TNX編輯 –

回答

11

薩瓦,試試這個:

(void)filter:(NSString*)keyword{ 
    NSString *keywordWithBackslashedApostrophes = [keyword stringByReplacingOccurrencesOfString:@"'" withString:@"\\'"]; 
    NSString* predicateString = [NSString stringWithFormat:@"title CONTAINS[c] '%@'", keywordWithBackslashedApostrophes]; 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:predicateString]; 
    self.filteredArray = [self.initialArray filteredArrayUsingPredicate:predicate]; 
} 

從您的代碼的主要區別是,一個撇號在關鍵字被替換爲反斜槓撇號。

0

嘗試看看這個answer 你可以做的一切,在predicateWithFormat不帶引號

[NSPredicate predicateWithFormat:@"title CONTAINS[c] '%@'", keyword] 
+0

沒有,兄弟,標題必須包含關鍵字,不匹配 –

+0

是的,但嘗試這樣做,跟單predicateWithFormat,沒必要用stringWithFormat我想展開 – rano

3

我也有這個謂詞過濾器的問題我有客戶名稱像奧康納和查詢失敗。 Alexey Golikov建議的解決方案工作正常,但我想知道是否有任何NSPredicate類級別的修補程序。字符串操作通常是一件昂貴的事情,您可能不希望這樣做,直到需要爲止。

-oop

0

問題是創建一個NSString,當你不需要這樣做。請注意,我們不需要NSString變量,我們從%@中刪除了撇號。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(title CONTAINS[c] %@)", keyword];