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, "")