gpt4 book ai didi

ios - 如何使用包含元素的数组创建 NSPredicate

转载 作者:行者123 更新时间:2023-11-28 10:03:05 26 4
gpt4 key购买 nike

我只有 Address 实体,其属性 favorites 类型为 [String]

地址

@objc(Address)
class Address: NSManagedObject, Observer {
@NSManaged var favourites: [String]
}

假设我有一些地址:

1: favourites: ["a", "b", "c"]
2: favourites: ["b", "c"]
3: favourites: ["a", "c"]
4: favourites: ["a"]
5: favourites: ["b"]

现在我需要在 favorites 中获取所有带有 a 的地址。所以结果应该是:1, 3, 4

换句话说,我需要检查数组 中的 ANY element 是否等于 特定字符串,然后应返回对象。

以下不起作用:

NSPredicate(format: "favourites CONTAINS %@", "a")

xcdatamodel中是这样定义的:

enter image description here

最佳答案

您不能在定义为带有谓词的可转换属性的数组中进行搜索。更好地定义另一个实体

@objc(Favourite)
class Favourite: NSManagedObject {
@NSManaged var name: String
}

以及从“地址”到“收藏夹”的一对多关系。

您可以使用谓词获取所有(即:至少一个)收藏夹等于字符串“a”的所有地址

NSPredicate(format: "ANY favourites.name == %@", "a")

或使用经过编译器检查的键路径文字更好:

NSPredicate(format: "ANY %K == %@", #keyPath(Address.favourites.name), "a")

对于不区分大小写的比较,您可以使用

NSPredicate(format: "ANY %K ==[c] %@", #keyPath(Address.favourites.name), "a")

关于ios - 如何使用包含元素的数组创建 NSPredicate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57658686/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com