【问题标题】:get all books from person从人那里得到所有的书
【发布时间】:2018-03-20 00:29:24
【问题描述】:

我正在为 macOS 使用 swift 4,我有两个核心数据实体(Person 和 Book)

我想请求所有书籍,例如 Person == Max。 使用此代码,我可以获取所有书籍:

let request = NSFetchRequest<Book>(entityName: "Book")
request.predicate = // 
request.sortDescriptors = [NSSortDescriptor(key: "bookName", ascending: true)]
   do {
      let books = try context.fetch(request)
      print(books)
   } catch { }

但是我如何必须使用谓词来仅获取分配给名为“Max”的人的书籍?

【问题讨论】:

  • 您是否看过核心数据编程指南中developer.apple.com/library/content/documentation/Cocoa/… 中的“过滤结果”? – 为什么要创建一个NSFetchRequest&lt;Position&gt; 来获取 Book 对象?
  • 我猜这个文档对我没有帮助。我现在可以使用这样的谓词:request.predicate = NSPredicate(format: "bookName = %@", "MyBook") 但我必须知道谓词必须如何寻找与书籍相关的指定人员
  • 只需遵循关键路径,例如NSPredicate(format: "person.name = %@", "Max")
  • 我如何知道我应该使用哪个关键路径?我用person.firstName 尝试了你的代码,我得到:CoreData: error: exception handling request: &lt;NSSQLFetchRequestContext: 0x60400018a4f0&gt; , keypath person.firstName not found in entity &lt;NSSQLEntity Book id=6&gt; with userInfo of (null) `
  • 请说明您的实体是如何定义的,以及它们具有哪些属性和关系,否则我们只能猜测。 – 如果您为“Book”创建了获取请求,为什么错误消息又是关于“Position”实体的?

标签: swift macos cocoa core-data


【解决方案1】:
  • 书籍与“人”与
  • 具有一对一的关系
  • Person 有一个属性“firstName”。

所以“person.firstName”是从一本书到一个名字的关键路径 它的拥有者,你正在寻找的谓词是

NSPredicate(format: "person.firstName = %@", "Max")

【讨论】:

    猜你喜欢
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多