【问题标题】:NSPredicate with Swift and Core DataNSPredicate 与 Swift 和核心数据
【发布时间】:2015-12-28 13:28:14
【问题描述】:

我有一个核心数据对象,我有 2 个 Fieds(一个字符串(GUID)和一个我想用作过滤器的 Int)

所以在 SQL 中它将是“SELECT * FROM Answers WHERE qIndex = 1 AND GUID = '88bfd206-82fb-4dd0-b65d-096f8902855c'

我已经用 Core Data 尝试过,但我无法使用字符串值进行过滤。

这是我的代码

    var request = NSFetchRequest(entityName: "Answers")
    request.returnsObjectsAsFaults = false;

    let resultPredicate1 = NSPredicate(format: "qIndex = %i", qIndex)
    let resultPredicate2 = NSPredicate(format: "formUUID = %s", formUUID)

    var compound = NSCompoundPredicate.andPredicateWithSubpredicates([resultPredicate1, resultPredicate2])
    request.predicate = compound


    var results:NSArray = context.executeFetchRequest(request, error: nil)

任何想法我做错了什么?使用相同的代码并过滤 2 个整数值,它可以正常工作。

提前致谢

【问题讨论】:

  • 您使用了字符串格式说明符 %i。我认为对于小数点应该是 %d,对于 NSNumber 应该是 %@。不是 %i 的 int,它不存在
  • @Xean: "%d" 和 "%i" 都可以用来格式化 int,它们是相同的。
  • 为什么没有任何匹配的结果不为空?我得到 [ (entity: Charts; id: 0xd000000000040000 ; data: )]
  • And results.count > 0 ?
  • 顺便说一句,由于 swift 支持字符串插值,因此您不必再使用老式的 format-vargargs 样式,并且可以将 NSPredicate(format: "qIndex = %i", qIndex) 替换为 NSPredicate(format: "qIndex = \(qIndex)")

标签: swift


【解决方案1】:

如果 formUUIDNSString 或 Swift String 那么你必须使用 %@占位符:

let resultPredicate2 = NSPredicate(format: "formUUID = %@", formUUID)

【讨论】:

  • 编辑建议注意事项:=== 都可以在谓词字符串中使用。
【解决方案2】:

这不是对您问题的确切回答,而是人们现在可能会遇到您的代码的问题:

在最新版本的 XCode 中,您现在必须解开谓词,如下所示:

var compound = NSCompoundPredicate.andPredicateWithSubpredicates([predicate1!, predicate2!])

因为 NSPredicate 初始化程序现在返回 NSPredicate?输入。

【讨论】:

  • 正如您自己所说,这并不是真正的答案,而是一个注释。因此,您应该将此添加为评论而不是答案。
  • 是的,没错。但是我在 stackOverflow 上注册只有几个星期,我的声誉 (1) 不允许我评论其他人的问题/答案;)
【解决方案3】:

您可以使用PredicatePal 框架,而不用担心%@ 转换然后组合AND 谓词:

let compound = *(Key("qIndex") == qIndex && Key("formUUID") == formUUID)

假设qIndexformUUID 是正确的类型,Swift 会自动推导出Key 对象的正确类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    • 2013-05-03
    • 1970-01-01
    • 2010-11-12
    • 2011-01-06
    相关资源
    最近更新 更多