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

标签 ios xcode core-data swift3 nspredicate

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

这是我的数据:

人 - 实体 声明 - 实体 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/

相关文章:

ios - 核心数据: How to check if data is in consecutive dates?

ios - 使用 Swift 在 Ios 中本地导入数据表并将其用于搜索功能

ios - 使用检索到的核心数据

iphone - 最大字体大小 UIFont

ios - 如何将样式应用于 Swift 中的所有文本字段

objective-c - 使用存储在变量中的类名来调用类方法?

ios - 在 Swift 4 中的 TabBar 下方绘制关闭过渡

ios - 多个目标匹配链接器标志的隐式依赖关系

ios - 我对逃避关闭有点困惑

iphone - UIPickerView 看起来像 UIDatePicker 但有几秒钟