CoreData 中的 URI 类型属性:如何使用 NSPredicate 进行查询

URI typed attributes in CoreData: how to query with NSPredicate

我有一个 CoreData-Entity,它存储一个类型为“URI”的名为“imageUrl”的属性。 它用于存储 URL(如 Swift URL / NSURL),例如。渲染远程图像。

如何查询 URI 类型属性的字符串表示形式?


示例:我想获取所有匹配 "http://mydomain.jpg"URL(string: "http://mydomain.jpg") 的对象,更准确地说。

对于“字符串”类型的属性,这就足够了:

NSPredicate(format: "myStringAttribute LIKE %@", "http://mydomain.jpg")

以下是否适用于 URI 类型的属性?

NSPredicate(format: "imageUrl LIKE %@", URL(string: "http://mydomain.jpg"))

我的回答是不要让那个问题没有答案,但在我看来,我们三个 @nylki (the author), @Joakim Danielson 和我自己一起回答了这个问题。那我就把它标记为“Community Wiki”。

CoreData 中的

URIURL 对象。 NSAttributeDescription.AttributeType for the NSAttributeDescription.AttributeType.uri.

的文档中是这样写的

LIKE 谓词中的关键字用于字符串比较,如 Predicate Format String Syntax 文档所述,因此我们需要使用 = 代替。

所以答案是:

NSPredicate(format: "imageUrl = %@", imageUrl as CVarArg)

NSPredicate(format: "imageUrl = %@", argumentArray: [imageUrl])

如果我们不想使用 as CVarArg.

避免拼写错误的更好方法是使用 %K 占位符,该占位符用于 %K is a var arg substitution for a key path.。合并为 #keyPath():

NSPredicate(format: "%K = %@", argumentArray: [#keyPath(YourEntityClass.imageUrl), imageUrl])

那样的话,如果我们用大写 i 而不是可能看不到的 l 错误 "imageUrI = %@" 写入,我们确保路径。