我有一个搜索栏和文本是通过对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请在问题中发布您的谓词创建代码。像你一样追加格式是造成你的麻烦的原因,如果你发布了代码,我可以告诉你如何解决它。 –
搜索'''应该没问题。请显示代码如何创建谓词。 –