无法理解 fetchRequest.predicate
can´t understand fetchRequest.predicate
我有一个相当 "simple" 的 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-"table"的内容是
变量的内容是
所以从
fetchRequest.predicate = NSPredicate(format: "kategorie == %i", kategorie.katid!)
我得到谓词
kategorie == 18
同时
kategorie.katid is 1
我听不懂:-(
有帮助吗???
这真的很奇怪,但你可以这样做:
NSPredicate(format: "kategorie = \(kategorie.katid!)")
然后您就不必担心是否需要 %i、%ld 或 %@ 等...
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)是这种特殊数字情况下的另一种解决方案,
但不是一般情况:如果你插入一个 string 那么任何百分比
字符将被解释为格式说明符并且导致
意外输出或崩溃。单引号或双引号也会
导致问题,因为这些在谓词中有特殊含义
格式化字符串。
我有一个相当 "simple" 的 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-"table"的内容是
变量的内容是
所以从
fetchRequest.predicate = NSPredicate(format: "kategorie == %i", kategorie.katid!)
我得到谓词
kategorie == 18
同时
kategorie.katid is 1
我听不懂:-(
有帮助吗???
这真的很奇怪,但你可以这样做:
NSPredicate(format: "kategorie = \(kategorie.katid!)")
然后您就不必担心是否需要 %i、%ld 或 %@ 等...
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)是这种特殊数字情况下的另一种解决方案, 但不是一般情况:如果你插入一个 string 那么任何百分比 字符将被解释为格式说明符并且导致 意外输出或崩溃。单引号或双引号也会 导致问题,因为这些在谓词中有特殊含义 格式化字符串。