如何在一个 NSFetchRequest 中获取核心数据关系?

Mar*_*ida 6 core-data nsfetchrequest ios swift

我有一个核心数据应用程序,其模型设置如下图所示:

核心数据模型

关系设置如下:

类别<-->>子类别<-->>项目

现在,是否可以在一次提取中从具有名为“categoryName”的相同属性的 Subcategory 和 Item 实体获取对象?我认为可以通过使用关系来完成,但我使用的代码不起作用,即:

let fetchNote = NSFetchRequest(entityName: "Category")
    fetchNote.predicate = NSPredicate(format: "ANY subcategory.name == %@ AND item.name == %@", "Badaue", "Badaue")
    let notes = try! appDel.managedObjectContext.executeFetchRequest(fetchNote) as? [Category]
    print(notes)
Run Code Online (Sandbox Code Playgroud)

ssc*_*ale 2

为了避免混淆,我建议重命名itemitems以反映它是一对多关系。同样适用于subcategory.

EDIT2 - 您要求获取具有特定的Subcategory和对象,对吗?您上面编写的查询根本不执行此操作。ItemcategoryName

Entity首先,是的,您将需要 2 个查询,因为您一次只能获取 1 种类型。

其次,让我们重写你的语法,因为现在它非常危险。

do {
  let predicate = NSPredicate(format: "categoryName == %@", "yourCategoryHere")
  let fetchSubcategory = NSFetchRequest(entityName: "Subcategory")
  fetchSubcategory.predicate = predicate
  if let subCategoryResults = try context.executeFetchRequest(fetchSubcategory) as? [Subcategory] {
    //do stuff
  }
  let fetchItem = NSFetchRequest(entityName: "Item")
  fetchItem.predicate = predicate
  if let itemResults = try context.executeFetchRequest(fetchItem) as? [Item] {
    //do stuff
  }
}catch {
  print(error)
}
Run Code Online (Sandbox Code Playgroud)