【发布时间】:2017-05-10 00:32:24
【问题描述】:
我正在尝试执行一个 fetch 请求来检查两件事。
这是我的数据:
人 - 实体 声明 - 实体 Person 实体与 To Many 的语句有关系。语句实体有一个名为 amountOwed 的属性。这是我要在谓词中检查的属性。
编辑 我想做的是这个。 检查我所有的 Persons 实体的名称,比如说 Bob。
一旦我找到 Bob 实体,我想检查他的所有 Statement 实体是否有一个名为 amountOwed 的属性,看看它是大于还是小于 0。
- 检查人员实体中的名称。当该名称匹配时,使用该实体。
- 检查 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
【问题讨论】:
-
为什么没有人阅读documentation? ;-)
-
错误是“这里不允许对多键。”。您的谓词中只有一对多键:“statement.amountOwed >= 0”。所以错误是说“每个人可以有很多报表 - 我应该使用哪一个?具有最大金额的那个?或最低金额?或者任何声明上的金额?或者检查所有报表上的金额?或者(如我认为您的意思)将所有相关语句的金额相加。如果是最后一个,请使用
fetchRequest.predicate = NSPredicate(format:"name == %@ AND statement.@sum.amountOwed >= 0", personName)。 -
我正在尝试显示每个人的所有语句,并将它们划分为负数和正数,然后在 tableView 的一部分中显示每个 FRC。这有意义吗?
-
为了澄清,您的表格视图将显示单个 Person 的语句。每行将代表一个语句(针对那个人)。将有两个部分;一个显示带有 +ve amountOwed 的 Statements,另一个显示带有 -ve amountOwed 的 Statements。如果正确,您希望这些行的顺序是什么?
-
没错。这些行可以是任何顺序。如果从最大到最小显示它们更容易,那很好。重要的是表格视图的每个部分都能正确显示。一节用于正金额,一节用于负金额。
标签: ios xcode core-data swift3 nspredicate