NSPredicate与Swift和核心数据

der*_*ida 17 swift

我有一个核心数据对象,我有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)
Run Code Online (Sandbox Code Playgroud)

任何想法我在做什么错?使用相同的代码和2个整数值筛选它工作正常.

提前致谢

Mar*_*n R 42

如果formUUID是一个NSString或一个Swift,String那么你必须使用 %@占位符:

let resultPredicate2 = NSPredicate(format: "formUUID = %@", formUUID)
Run Code Online (Sandbox Code Playgroud)


Dar*_*uin 8

这不是对您的问题的确切回答,但现在人们现在可能会使用您的代码解决问题:

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

var compound = NSCompoundPredicate.andPredicateWithSubpredicates([predicate1!, predicate2!])
Run Code Online (Sandbox Code Playgroud)

因为NSPredicate初始化程序现在返回NSPredicate?类型.

  • 恩,那就对了.但是我已经在stackOverflow上注册了几个星期,我的声誉(1)不允许我评论其他人的问题/答案;) (6认同)