gpt4 book ai didi

ios - NSPredicate 核心数据中的多对多关系

转载 作者:搜寻专家 更新时间:2023-10-30 22:16:21 24 4
gpt4 key购买 nike

我有一个 NSPredicate其中包括多个聚合过滤器,这会引发异常。

我有以下核心数据模型:

Core data model

我想挑选那些 ApparelItems colours 中的任何一个有一个 rgb 13576743,所有picks有一个pickTime早于给定的 NSDate .

我创建谓词的代码是:

let request = NSFetchRequest(entityName: "ApparelItem")
var predicates = [NSPredicate]()

predicates.append(NSPredicate(format: "ANY colours.rgb = 13576743"))

// find the NSDate representing midnight x days ago
let cal = NSCalendar.currentCalendar()
if let xDaysAgo = cal.dateByAddingUnit(.Day, value: -2, toDate: NSDate(), options: [])
{
let midnightXDaysAgo = cal.startOfDayForDate(xDaysAgo)

predicates.append(NSPredicate(format: "(ALL picks.pickTime < %@)", midnightXDaysAgo))
}

request.predicate = NSCompoundPredicate(andPredicateWithSubpredicates: predicates)

let searchData = try? objectContext.executeFetchRequest(request)

我得到以下异常:

Exception name=NSInvalidArgumentException, reason=Unsupported predicate (ANY colours.rgb == 13576743) AND ALL picks.pickTime < CAST(479347200.000000, "NSDate")

我试过:

  1. 每个单独的谓词都可以正常工作。即ANY colours.rgb = ...作品,也ALL picks.pickTime < ...作品。它们只是在组合到同一个查询中时不起作用。

  2. 将两个 using 结合到一个查询中,与 AND 链接, 而不是使用 NSCompoundPredicate .结果是一样的。

有没有可能核心数据根本不支持对多个一对多关系进行过滤?这看起来很奇怪。在什么情况下我应该怎么做?

最佳答案

可能可以为 NSPredicate 尝试 SUBQUERY()

下面的代码是我猜测出来的,不太确定它是否有效。通常,对于带有 NSPredicate 的 to-many 查询子句,我会反复试验很多次。

var predicates = [NSPredicate]()
predicates.append(NSPredicate(format: "SUBQUERY(colours, $colour, ANY $colour.rgb = 13576743).@count > 0"))
let cal = NSCalendar.currentCalendar()
if let xDaysAgo = cal.dateByAddingUnit(.Day, value: -2, toDate: NSDate(), options: []) {
let midnightXDaysAgo = cal.startOfDayForDate(xDaysAgo)
predicates.append(NSPredicate(format: "SUBQUERY(picks, $pick, ALL $pick.pickTime < %@).@count > 0", midnightXDaysAgo))
}

关于ios - NSPredicate 核心数据中的多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35963439/

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