使用CoreData,NSPredicate和fetchRequest时遇到了奇怪的情况。
我的谓词是:
predicate = NSPredicate(format: "(status == %d) AND (watched == NO) AND (user_id == %@)", argumentArray: [Int(ItemStatus.Shortlisted.rawValue), false, userId])
如果我使用上面的谓词运行fetchRequest,我得到0结果。如果我 交换 带有user_id
子句的watched
子句,我会得到预期的结果。
如果我使用NSCompundPredicate,将各个子句分解为子谓词,使用:
request.predicate = NSCompoundPredicate(type: .AndPredicateType, subpredicates: [subPredicate1, subPredicate2, subPredicate3])
结果就是我的期望。
我不清楚为什么这三种方法之间存在差异。
思想?
答案 0 :(得分:2)
猜测,(我的核心数据有点生疏)看起来你在参数数组中指定了3个参数,但是谓词只使用其中的2个。
使用(观察==否),您已指定内联值而不是"%"分隔格式,因此它不会使用" false"来自参数数组。