Core data 从Swift中的数组值构建NSCompoundPredicate

Core data 从Swift中的数组值构建NSCompoundPredicate,core-data,swift,nspredicate,nscompoundpredicate,Core Data,Swift,Nspredicate,Nscompoundpredicate,列表项 所以我试图在Swift中设置一个具有多个条件的请求。SQL等效于: 选择BOARDID 董事会 我不喜欢“someBoard” 我不喜欢“另一个董事会” .. 我有一个字符串数组,我试图遍历每个字符串来创建一个子预测,将其添加到一个compoundPredicate,然后使用该compoundPredicate创建一个获取请求: let openBoards = ["someBoard", "anotherBoard", "etc"], request = NSFetchReq

列表项

所以我试图在Swift中设置一个具有多个条件的请求。SQL等效于:

选择BOARDID
董事会
我不喜欢“someBoard”
我不喜欢“另一个董事会”
..
我有一个字符串数组,我试图遍历每个字符串来创建一个子预测,将其添加到一个compoundPredicate,然后使用该compoundPredicate创建一个获取请求:

let openBoards = ["someBoard", "anotherBoard", "etc"],
    request = NSFetchRequest(entityName: "Board")

var openBoardsSubPredicates: Array = [],
    error: NSError? = nil

for board in openBoards {
    var subPredicate = NSPredicate(format: "boardID not like '\(board)'")
    openBoardsSubPredicates += subPredicate
}

request.predicate = NSCompoundPredicate.andPredicateWithSubpredicates(openBoardsSubPredicates)
但是,它在var子预测行失败


谢谢

错误告诉您问题所在。您提供的格式无效。具体来说,没有“不喜欢”的比较。您必须在外部执行“不”操作:


正如下面提到的@MartinR,您可以让NSPredicate自动转义特殊字符,这样它们就不会干扰谓词,方法是让它插入变量而不是使用字符串插值。

它“失败”是什么意思?具体点。这是编译器错误吗?它是否在运行时崩溃?它报告了什么错误?我得到了以下两个错误:1。引发了一个未捕获的异常,2。无法解析格式字符串“boardID不象'someBoard'”,谢谢!我认为格式字符串与sqlite语法相关:(更好:
NSPredicate(format:“not(boardID like%@)”,board)
。否则,如果“board”包含特殊字符(如单引号),它就会崩溃。千万不要混合使用字符串格式(或者在本例中,字符串插值)和谓词格式。@Pirijan,您可以在@drewag:Minor-tritching:
NSPredicate(format:…)
中获得有关NSPredicate格式的详细信息,它不会“自动转义特殊字符”。谓词是树状结构(使用NSComparisonPredicate、NSCompoundPredicate等NSPredicate的各种子类)而不是字符串。
NSPredicate(格式:…)
是一种从格式字符串和参数创建谓词的方便方法。如果格式字符串包含键或值,则必须正确转义。如果键和值作为参数提供,则无需转义。@MartinR,我不确定你说的是什么。根据文档“argList:要替换为谓词格式的参数。”
NSPredicate(format: "not (boardID like %@)", board)