swift 中的 NSPredicate 用于空字符串
NSPredicate in swift for empty string
Swift 4.2 iOS 11.x
正在尝试读取 iCloud 数据库中设置了 lineOwner 字段的记录,但难以创建有效的 NSPredicate!
这看起来不错,但无法解析。
let predicate = NSPredicate(format: remoteAttributes.lineOwner + " != %@",0)
我收到一条无效的谓词错误消息[和讨价还价的严重崩溃]。花几个小时在这上面并失去生存的意愿。
如果我打印出数据库,我会看到这个。
你可以简单地比较空的String
,""
。 %@
占位符表示 String
,因此发生崩溃是因为您向 NSPredicate
提供了 Int
而不是 String
.
您还应该对变量名称使用 %K
占位符,而不是附加字符串。
let predicate = NSPredicate(format: " %K != %@", remoteAttributes.lineOwner, "")
如果你还想过滤掉nil
个值,可以使用复合谓词:
let predicate = NSPredicate(format: " %K != %@ AND %K != nil", remoteAttributes.lineOwner, "")
Swift 4.2 iOS 11.x
正在尝试读取 iCloud 数据库中设置了 lineOwner 字段的记录,但难以创建有效的 NSPredicate!
这看起来不错,但无法解析。
let predicate = NSPredicate(format: remoteAttributes.lineOwner + " != %@",0)
我收到一条无效的谓词错误消息[和讨价还价的严重崩溃]。花几个小时在这上面并失去生存的意愿。
如果我打印出数据库,我会看到这个。
你可以简单地比较空的String
,""
。 %@
占位符表示 String
,因此发生崩溃是因为您向 NSPredicate
提供了 Int
而不是 String
.
您还应该对变量名称使用 %K
占位符,而不是附加字符串。
let predicate = NSPredicate(format: " %K != %@", remoteAttributes.lineOwner, "")
如果你还想过滤掉nil
个值,可以使用复合谓词:
let predicate = NSPredicate(format: " %K != %@ AND %K != nil", remoteAttributes.lineOwner, "")