【问题标题】:Why do I get an NSInvalidArgument Exception, reason: 'Unable to parse the format string'为什么我得到一个 NSInvalidArgument 异常,原因:'无法解析格式字符串'
【发布时间】:2016-06-01 21:43:52
【问题描述】:

虽然有很多关于这个主题的话题,但我一直无法找到我的问题的答案。当我在下面重构此函数以将搜索参数传递给 NSPredicate 而不是硬编码搜索值时,我现在收到错误:

*** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“无法解析格式字符串“formulaName == %0”'

func fetchFormula() {
    let fetchRequest = NSFetchRequest(entityName: "Formula")
    let calculation = calculator.selectedFormula
    let name = calculation.formulaName // name = Baechle
    let predicate = NSPredicate(format: "formulaName == %0", name)
    fetchRequest.predicate = predicate

    do {
      let results = try managedObjectContext.executeFetchRequest(fetchRequest) as? [Formula]
      if (results != nil) {
        formula.text = results?[0].formulaName
      }
    } catch {
      fatalError("Error fetching data!")
    }
    return
  }

尽管我认为我的语法是正确的,但我已经尝试了我在 SO 和 Apple 文档中找到的几乎所有其他建议:

    let predicate = NSPredicate(format: "formulaName = 'Baechle'") // started with this and learned that this is a bad idea, but it worked
    let predicate = NSPredicate(format: "formulaName = %0", name) // only 1 '=' which results in the error I've described
    let predicate = NSPredicate(format: "formulaName == %0", name) // now 2 '==', but still doesn't work, produces "formulaName == %0"'and same error
    let predicate = NSPredicate(format: "formulaName == '%0'", name) // produces formulaName == "%0" resulting in no results

我没有想法。非常感谢任何帮助。

【问题讨论】:

    标签: swift nspredicate predicate


    【解决方案1】:

    因为您一直使用错误的格式说明符。应该是%@ 而不是%0

    let predicate = NSPredicate(format: "formulaName == %@", name)
    

    Predicate Format String Syntax

    【讨论】:

    • <emoji of me slapping my forehead for doing something stupid>
    • 哈哈。它发生了。不要对自己太苛刻
    猜你喜欢
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多