gpt4 book ai didi

swift - 如何使用 BETWEEN 子句创建 CoreData SUBQUERY?

转载 作者:行者123 更新时间:2023-11-28 07:29:50 25 4
gpt4 key购买 nike

我试图仅检索其 entries.date 在两个日期之间的类别。我的研究表明,这可以通过 SUBQUERY 实现。我遵循了这篇 medium.com 文章中的示例 SUBQUERY Is Not That Scary然而,当我运行我的项目时,我得到一个 'NSInvalidArgumentException',原因:'无法解析格式字符串“SUBQUERY(entries, $entry, $entry.date BETWEEN {%@, %@})”'

我已经上传了我的数据模型的图像和我的 NSFetchedResultsController 内容的代码片段,我在其中使用 SUBQUERY 构造了我的谓词语句。

Image of my data model

    // Create Fetch Request
let fetchRequest: NSFetchRequest<CDCategory> = CDCategory.fetchRequest()

// Configure Fetch Request
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "entriesCount", ascending: false)]
fetchRequest.predicate = NSPredicate(format: "SUBQUERY(entries, $entry, $entry.date BETWEEN {%@, %@})", dataController.week.startDate as CVarArg, dataController.week.endDate as CVarArg)

// Create Fetched Results Controller
let fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: CoreDataStack.instance.context, sectionNameKeyPath: nil, cacheName: nil)

// Configure Fetched Results Controller
fetchedResultsController.delegate = self

return fetchedResultsController

最佳答案

您需要向子查询添加一个条件:假设您想要包含 CDCategory 对象,其中任何一个 entries 的日期都在您的两个给定日期之间,您希望子查询的计数大于零:

fetchRequest.predicate = NSPredicate(format: "SUBQUERY(entries, $entry, $entry.date BETWEEN {%@, %@}).@count > 0", dataController.week.startDate as CVarArg, dataController.week.endDate as CVarArg)

相反,如果您只想选择那些没有条目日期匹配的条目,您希望计数为零:

fetchRequest.predicate = NSPredicate(format: "SUBQUERY(entries, $entry, $entry.date BETWEEN {%@, %@}).@count == 0", dataController.week.startDate as CVarArg, dataController.week.endDate as CVarArg)

类似的结构将允许您只选择所有条目都符合您的条件的结构。

关于swift - 如何使用 BETWEEN 子句创建 CoreData SUBQUERY?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55204444/

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