我有一个非常“简单”的 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-“表”的内容是
ios - 无法理解 fetchRequest.predicate-LMLPHP

变量的内容是

ios - 无法理解 fetchRequest.predicate-LMLPHP

所以从
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/

10-14 23:28