Bar*_*zyk 3 core-data nspredicate ios swift
我只是Address有财产的实体favourites类型的[String]
地址
@objc(Address)
class Address: NSManagedObject, Observer {
@NSManaged var favourites: [String]
}
Run Code Online (Sandbox Code Playgroud)
假设我有一些地址:
1: favourites: ["a", "b", "c"]
2: favourites: ["b", "c"]
3: favourites: ["a", "c"]
4: favourites: ["a"]
5: favourites: ["b"]
Run Code Online (Sandbox Code Playgroud)
现在我需要在a里面获取所有地址favourites。所以结果应该是:1, 3, 4
换句话说,我需要检查是否ANY element在数组中is equal为特定字符串,然后应该返回对象。
以下不起作用:
NSPredicate(format: "favourites CONTAINS %@", "a")
Run Code Online (Sandbox Code Playgroud)
这是它的定义方式xcdatamodel:
您不能在定义为具有谓词的可转换属性的数组中进行搜索。更好地定义另一个实体
@objc(Favourite)
class Favourite: NSManagedObject {
@NSManaged var name: String
}
Run Code Online (Sandbox Code Playgroud)
以及从“地址”到“收藏夹”的一对多关系。
您可以使用谓词获取具有任何(即:至少一个)喜欢的地址等于字符串“a”的所有地址
NSPredicate(format: "ANY favourites.name == %@", "a")
Run Code Online (Sandbox Code Playgroud)
或者使用编译器检查的键路径文字更好:
NSPredicate(format: "ANY %K == %@", #keyPath(Address.favourites.name), "a")
Run Code Online (Sandbox Code Playgroud)
对于不区分大小写的比较,您可以使用
NSPredicate(format: "ANY %K ==[c] %@", #keyPath(Address.favourites.name), "a")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1387 次 |
| 最近记录: |