我有一个非常“简单”的 NSFetchRequest 谓词:
guard let kategorie = self.fetchedResultsController.objectAtIndexPath(indexPath) as? Kategorien else {
return
}
let fetchRequest = NSFetchRequest(entityName: "Details")
fetchRequest.predicate = NSPredicate(format: "kategorie == %i", kategorie.katid!)
do {
let results = try self.managedObjectContext.executeFetchRequest(fetchRequest) as! [Details]
...
sqllite-“表”的内容是
变量的内容是
所以从
fetchRequest.predicate = NSPredicate(format: "kategorie == %i", kategorie.katid!)
我得到谓词
尽管
我无法理解:-(
任何帮助???
最佳答案
katid
是一个(可选) NSNumber
,你的情况会发生什么
是将对象的(低 32 位)地址视为整数。
正确的格式
说明符是 %@
(对于 NSObject
子类的实例):
NSPredicate(format: "kategorie == %@", kategorie.katid!)
或者,将对象转换为整数:
NSPredicate(format: "kategorie == %d", kategorie.katid!.intValue)
当然,应该避免强制展开,例如
NSPredicate(format: "kategorie == %d", kategorie.katid?.intValue ?? 0)
在格式字符串中使用字符串插值(如
@Gargoyle) 是这种特殊数字情况下的另一种解决方案,
但不是一般的:如果你插入一个字符串,那么任何百分比
字符将被解释为格式说明符并导致
到意外输出或崩溃。单引号或双引号也会
导致问题,因为这些在谓词中具有特殊含义
格式字符串。
关于ios - 无法理解 fetchRequest.predicate,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37465556/