我有一個搜索欄和文本是通過對CoreData解僱搜索:崩潰與引號字符
produkt.name CONTAINS[cd] %@
但這崩潰,當用戶鍵入'
,因爲'
字符弄亂我的查詢:
由於未捕獲的異常而終止應用程序NSInvalidArgumentException
原因:無法解析格式字符串produkt.name CONTAINS [cd]。
CoreData中沒有選項可以處理這個問題嗎?我無法想象我必須自己逃脫嗎?
我有一個搜索欄和文本是通過對CoreData解僱搜索:崩潰與引號字符
produkt.name CONTAINS[cd] %@
但這崩潰,當用戶鍵入'
,因爲'
字符弄亂我的查詢:
由於未捕獲的異常而終止應用程序NSInvalidArgumentException
原因:無法解析格式字符串produkt.name CONTAINS [cd]。
CoreData中沒有選項可以處理這個問題嗎?我無法想象我必須自己逃脫嗎?
我認爲,它會採取照顧。
下面是我嘗試是並通過噢 '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正確組建,它已經在照顧'和'角色,而我的應用不會崩潰。
如果您不需要搜索'
字符,你可以簡單地從搜索字段中排除它在你的文本字段的委託回調:
- (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:@""]];
您可以替換字符串'
用繩子''
,像
string = [string stringByReplacingOccurrencesOfString:@"'" withString:@"''"];
-1構造謂詞時,這是不必要的 –
你不應該做任何字符替換任何。我猜你正在創建這樣的謂詞:
NSString *s = [NSString stringWithFormat:@"produkt.name CONTAINS[cd] '%@'", term];
NSPredicate *p = [NSPredicate predicateWithFormat:s];
這將是不正確的。所有你需要做的是這樣的:
NSPredicate *p = [NSPredicate predicateWithFormat:@"produkt.name CONTAINS[cd] %@", term];
這將工作,無論任何單引號等在搜索詞。
無法解析格式字符串「(nachname CONTAINS [cd]'M)OR(vorname CONTAINS [cd]'M)」'由[subString appendFormat:@「(%@ CONTAINS [cd]%@)OR「,欄[i],詞組]; } 其他{ [subString appendFormat:@「(%@ CONTAINS [cd]%@)」,columns [i],phrase]; – netshark1000
@ netshark1000請在問題中發佈您的謂詞創建代碼。像你一樣追加格式是造成你的麻煩的原因,如果你發佈了代碼,我可以告訴你如何解決它。 –
搜索'''應該沒問題。請顯示代碼如何創建謂詞。 –