CoreData、NSPredcate和fetchRequest令人费解的行为——或者只是我自己



我在使用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"。

相关内容

最新更新