2012-12-06 70 views
0

我有一個搜索欄和文本是通過對CoreData解僱搜索:崩潰與引號字符

produkt.name CONTAINS[cd] %@ 

但這崩潰,當用戶鍵入',因爲'字符弄亂我的查詢:

由於未捕獲的異常而終止應用程序NSInvalidArgumentException
原因:無法解析格式字符串produkt.name CONTAINS [cd]。

CoreData中沒有選項可以處理這個問題嗎?我無法想象我必須自己逃脫嗎?

+0

搜索'''應該沒問題。請顯示代碼如何創建謂詞。 –

回答

0

我認爲,它會採取照顧。

下面

是我嘗試是並通過噢 'GD「作爲字符串中搜索框

- (void) stringWithPredicateText : (NSString *)predicateText { 

    if ([predicateText length] >0) { 
     NSLog(@"predicateText = (%@)",predicateText); 
     NSPredicate *predicate = [NSPredicate predicateWithFormat:@"location contains[cd] %@",predicateText]; 
     NSLog(@"Predicate = <%@>",predicate); 
    } 

} 

輸出:

試驗[52856:707] predicateText =(噢' GD」 )

測試[52856:707]謂語=(位置包含[CD]「哦,'GD \ 「」)

在這裏你可以看到謂詞文本和謂語AR e正確組建,它已經在照顧'和'角色,而我的應用不會崩潰。

-1

如果您不需要搜索'字符,你可以簡單地從搜索字段中排除它在你的文本字段的委託回調:

- (BOOL)textField:(UITextField *)textField 
    shouldChangeCharactersInRange:(NSRange)range 
    replacementString:(NSString *)string { 

    if ([string isEqualToString:@"'"]) return NO; 
    return YES; 
} 

你可以也直接構建在刪除有問題的字符謂詞。

[NSPredicate predicateWithFormat:@"produkt.name CONTAINS[cd] %@", 
    [searchString stringByReplacingOccurrencesOfString:@"'" withString:@""]]; 
+0

以及如果用戶應該能夠搜索'? – netshark1000

+0

-1當構造謂詞時,這是不必要的 –

+0

根據你的問題,它不是。 – Mundi

0

您可以替換字符串'用繩子'',像

string = [string stringByReplacingOccurrencesOfString:@"'" withString:@"''"]; 
+0

-1構造謂詞時,這是不必要的 –

2

你不應該做任何字符替換任何。我猜你正在創建這樣的謂詞:

NSString *s = [NSString stringWithFormat:@"produkt.name CONTAINS[cd] '%@'", term]; 
NSPredicate *p = [NSPredicate predicateWithFormat:s]; 

這將是不正確的。所有你需要做的是這樣的:

NSPredicate *p = [NSPredicate predicateWithFormat:@"produkt.name CONTAINS[cd] %@", term]; 

這將工作,無論任何單引號等在搜索詞。

+0

無法解析格式字符串「(nachname CONTAINS [cd]'M)OR(vorname CONTAINS [cd]'M)」'由[subString appendFormat:@「(%@ CONTAINS [cd]%@)OR「,欄[i],詞組]; } 其他{ [subString appendFormat:@「(%@ CONTAINS [cd]%@)」,columns [i],phrase]; – netshark1000

+0

@ netshark1000請在問題中發佈您的謂詞創建代碼。像你一樣追加格式是造成你的麻煩的原因,如果你發佈了代碼,我可以告訴你如何解決它。 –