【问题标题】:NSFetchRequest fires NSInvalidArgumentException when query ontains apostrophe当查询包含撇号时,NSFetchRequest 会触发 NSInvalidArgumentException
【发布时间】: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的位置发布您的代码。
  • 有必要用转义撇号替换撇号

标签: cocoa-touch core-data nsfetchrequest


【解决方案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 = %@";
      

      【讨论】:

        猜你喜欢
        • 2018-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多