我在使用CoreData、NSPredcate和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"。