【发布时间】:2018-08-28 13:24:57
【问题描述】:
我有一个包含类别、状态和项目实体的模型(由于某种原因它很大):
我想维护一个包含所有 Category 对象的 NSFetchedResultsController,这些对象至少有一个状态为“open”或“purchased”的 Item。我已经广泛搜索,可以找到大量 CoreData 到多关系线程,但似乎找不到这样的东西。
我需要谓词干预 - 我的当前抛出异常是因为我试图非法使用多对多关系:
'NSInvalidArgumentException', reason: 'to-many key not allowed here'
这是我现在的代码(糟糕的代码,糟糕!):
lazy var searchHeaderController: NSFetchedResultsController<Category> = {
let request = Category.createFetchRequest()
request.predicate = NSPredicate(format: "items.status.name == 'open' || items.status.name == 'purchased'")
let sort = NSSortDescriptor(key: "sortOrder", ascending: true)
request.sortDescriptors = [sort]
let fetchedResultsController = NSFetchedResultsController(fetchRequest: request, managedObjectContext: mainContext, sectionNameKeyPath: "sortOrder", cacheName: nil)
do {
try fetchedResultsController.performFetch()
} catch {
fatalError("Big bummer yo! Error with performFetch in searchHeaderController() Error: \(error)")
}
return fetchedResultsController
}()
感谢您的帮助!
【问题讨论】:
-
尝试使用
ANY或IN关键字。 developer.apple.com/library/archive/documentation/Cocoa/… 。如“status.name == ‘open’ IN items” -
如上所述,您的谓词应该是由 2 个组成的 NSCompoundPredicate,它们的格式应为:“ANY items.status.name == open”,删除字符串周围的单引号
-
感谢 cmets - 我现在使用的是 NSCompoundPredicate,它适用于第一次提取,但它无法与上下文保持同步。我可以在这里发布代码还是从技术上讲这是一个新问题?再次感谢
标签: ios swift core-data one-to-many nsfetchedresultscontroller