当查询包含撇号时,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的主要内容,如果未能解决你的问题,请参考以下文章
将带撇号的 json 值发送到 Web 服务时出现无效对象错误