我在使用 CoreData、NSPredicate 和 fetchRequest 时遇到了一个奇怪的场景。
我的谓词是:
predicate = NSPredicate(format: "(status == %d) AND (watched == NO) AND (user_id == %@)", argumentArray: [Int(ItemStatus.Shortlisted.rawValue), false, userId])
如果我使用上述谓词运行 fetchRequest,我会得到 0 个结果。如果我用 watched
子句交换 user_id
子句,我会得到预期的结果。
如果我使用 NSCompundPredicate,将各个子句分解为子谓词,使用:
request.predicate = NSCompoundPredicate(type: .AndPredicateType, subpredicates: [subPredicate1, subPredicate2, subPredicate3])
结果是我所期望的。
我不清楚为什么这三种方法之间存在差异。
想法?
最佳答案
猜测一下,(我的核心数据有点生疏)看起来你在参数数组中指定了 3 个参数,但谓词只使用了其中的 2 个。
使用 (watched == NO),您指定了内联值而不是使用“%”分隔格式,因此它不会使用参数数组中的“false”。
关于ios - CoreData、NSPredicate 和 fetchRequest 令人费解的行为 - 或者只是我?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34661185/