gpt4 book ai didi

swift - 过滤一对多的导航属性

转载 作者:行者123 更新时间:2023-11-30 12:32:10 25 4
gpt4 key购买 nike

我有一个模型类别,其关系属性文章是一个 NSOrderedSet。现在我想获取满足特定条件的文章的所有类别,在 SQL 中我会这样写:

SELECT * 
FROM Category AS cat
JOIN Article AS art ON art.categoryId = cat.categoryId AND art.gender='m';

我尝试过:

NSPredicate(format: "articles.gender like %@ OR articles.gender = %@", gender.lowercased(), "n")

我收到以下错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'to-many key not allowed here'

完整代码:

    let ctx = self.Context()

var gender = UserDefaults.standard.string(forKey: "gender_preference") ?? "*"
if gender.uppercased() == "N" { gender = "*" }

// Create Fetch Request
let fetchRequest: NSFetchRequest = ArticleCategory.fetchRequest()
let predicate = NSPredicate(format: "articles.gender like %@ or articles.gender = %@", gender, "n")
fetchRequest.predicate = predicate

// sort by name
let sort = NSSortDescriptor(key: "name", ascending: true)
fetchRequest.sortDescriptors = [sort]

do {

let result = try ctx.fetch(fetchRequest)
return result

} catch {

print(error)

}

return []

亲切的问候

编辑:

Model Relationship

最佳答案

我发现使用 SUBQUERY 比使用 ANY、ALL、NONE 或 SOME 更可靠,尤其是对于复合子句。获取任何文章满足条件的类别相当于获取满足条件的文章数大于零:

let predicate = NSPredicate(format: "SUBQUERY(articles, $a, $a.gender like %@ OR $a.gender == %@).@count > 0", gender, "n")

关于swift - 过滤一对多的导航属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43378486/

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