gpt4 book ai didi

ios - 将 2 个值组合成一个 NSPredicate

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:02:12 25 4
gpt4 key购买 nike

我正在尝试执行一个提取请求来检查两件事。

这是我的数据:

人 - 实体声明 - 实体Person 实体与语句的关系为 To Many。报表实体有一个名为 amountOwed 的属性。这是我要在谓词中检查的属性。

编辑我想做的是这个。检查我所有的 Persons 实体的名称,比方说 Bob。

找到 Bob 实体后,我想检查他的所有 Statement 实体是否有一个名为 amountOwed 的属性,看看它是大于还是小于 0。

  1. 检查个人实体中的名称。当该名称匹配时,使用该实体。
  2. 检查 Statement 实体中的 amountOwed 是否大于或小于 0。

这就是我一直在努力开始工作的东西。

let fetchRequest: NSFetchRequest<Person> = Person.fetchRequest()
fetchRequest.predicate = NSPredicate(format:"name == %@ AND @statement.amountOwed >= 0", personName))
let sort = NSSortDescriptor(key: #keyPath(Person.name), ascending: true)
fetchRequest.sortDescriptors = [sort]
positiveFetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: coreDataStack.managedContext, sectionNameKeyPath: nil, cacheName: nil)

do {
try positiveFetchedResultsController.performFetch()
} catch let error as NSError{
print("Fetching error: \(error), \(error.userInfo)")
}

我收到这个错误:

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

我在这里找到了 AND 方法:using AND link

编辑 enter image description here

最佳答案

您应该构建您的 FRC 以获取 Statement 对象,而不是 Person 对象:

let fetchRequest: NSFetchRequest<Statement> = Statement.fetchRequest()

假设 statement 关系有一个名为 person 的反向(一对一)关系,那么您可以使用以下谓词来确保您只获取具有肯定的语句amountOwed 与具有给定名称的人有关:

fetchRequest.predicate = NSPredicate(format:"person.name == %@ AND amountOwed >= 0", personName)

(对于负的 amountOwed 也是类似的)。指定排序描述符以获得您想要的任何排序顺序。然后,您的 FRC 的 fetchedObjects 数组将包含可用于填充 TableView 的 Statement 对象:第 0 部分的正 FRC 和第 1 部分的负 FRC(反之亦然) ).

注意。因为您正在获取 Statement 对象,所以只用一个 FRC 就可以实现您想要的 - 但前提是您对按 amountOwed(升序)排序的语句感到满意或降序)。如果您希望这样做,我可以提供更多详细信息。

关于ios - 将 2 个值组合成一个 NSPredicate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41316066/

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