【发布时间】: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<Position>来获取 Book 对象? -
我猜这个文档对我没有帮助。我现在可以使用这样的谓词:
request.predicate = NSPredicate(format: "bookName = %@", "MyBook")但我必须知道谓词必须如何寻找与书籍相关的指定人员 -
只需遵循关键路径,例如
NSPredicate(format: "person.name = %@", "Max") -
我如何知道我应该使用哪个关键路径?我用
person.firstName尝试了你的代码,我得到:CoreData: error: exception handling request: <NSSQLFetchRequestContext: 0x60400018a4f0> , keypath person.firstName not found in entity <NSSQLEntity Book id=6> with userInfo of (null)` -
请说明您的实体是如何定义的,以及它们具有哪些属性和关系,否则我们只能猜测。 – 如果您为“Book”创建了获取请求,为什么错误消息又是关于“Position”实体的?
标签: swift macos cocoa core-data