当查询包含撇号时,NSFetchRequest 会触发 NSInvalidArgumentException

Posted

技术标签:

【中文标题】当查询包含撇号时,NSFetchRequest 会触发 NSInvalidArgumentException【英文标题】:NSFetchRequest fires NSInvalidArgumentException when query ontains apostrophe 【发布时间】:2011-09-19 07:03:10 【问题描述】:

当我创建包含撇号的查询时,出现错误:

'NSInvalidArgumentException',原因:'无法解析格式 字符串“SELF.sale.ID == 0 AND ((SELF.dam contains[cd] 'Michael's') OR (SELF.name 包含 [cd] 'Michael's')或(SELF.purchaserLocation contains[cd] 'Michael's') OR (SELF.purchaserName contains[cd] 'Michael's') OR (SELF.sire contains[cd] 'Michael's') OR (SELF.vendor 包含[cd] '迈克尔的'))"'

我尝试用两个撇号替换单个撇号,但仍然出现相同的错误。 当查询不包含撇号时,一切正常。 谢谢

【问题讨论】:

在构造NSPredicate的位置发布您的代码。 有必要用转义撇号替换撇号 【参考方案1】:

我的错,我必须用转义字符串替换单个撇号 \'

【讨论】:

【参考方案2】:

其实这里是真正的解决方案: Issue escaping single quote in ios with stringByReplacingOccurrencesOfString:widthString

你需要放2个\,因为\是一个字符,所以需要转义到。

【讨论】:

【参考方案3】:

如果在使用 [NSPredicate predicateWithFormat] 时用单引号将格式字符串中的格式占位符括起来,就会发生这种情况。不需要这些引号。

错误示例:

NSPredicate *myPred = [NSPredicate predicateWithFormat:@"name = '%@'";

正确的例子:

NSPredicate *myPred = [NSPredicate predicateWithFormat:@"name = %@";

【讨论】:

以上是关于当查询包含撇号时,NSFetchRequest 会触发 NSInvalidArgumentException的主要内容,如果未能解决你的问题,请参考以下文章

如何将包含撇号的字符串传递给android中的查询?

使用 Python 处理 sql 时的撇号 (') 帮助

将带撇号的 json 值发送到 Web 服务时出现无效对象错误

Spring Boot JPA - 本机查询双撇号上的 SQL 错误

PHP、SQL、撇号、文本输入

C/C++的#include命令,文件名用尖括号或双撇号括起来的区别