核心数据 - 使用keypath和对象ID获取对象

问题描述:

我想从核心数据中提取我的数据,其中书籍分配给人“Max”。对于这一点,我有以下代码:核心数据 - 使用keypath和对象ID获取对象

let request = NSFetchRequest<Book>(entityName: "Book") 
    request.predicate = NSPredicate(format: "person.firstName = %@", "Max") 
    do { 
     let books = try context.fetch(request) 
     for x in 0 ..< books.count { 
      print(books[x].name) 
     } 
    } catch { } 

但现在我想取其中的书籍被分配到一个人与对象ID“XYZ”的数据。

我尝试这样做,但它不工作:

request.predicate = NSPredicate(format: "person.self = %@", myPersonObjectID) 
+0

您的问题标题与问题主体不匹配(根本不符合*排序*)。 –

+0

我更新了它:) – Ghost108

你应该existingObject从Object ID获取对象和使用,在谓语。

if let myPerson = context.existingObject(with: myPersonObjectID) { 
    request.predicate = NSPredicate(format: "person = %@", myPerson) 
} 
+0

我喜欢它 - 谢谢:) – Ghost108

+0

通常最好使用'existingObject(with:)',如果没有带ID的对象,它将返回nil。 –

+0

@TomHarrington谢谢!更新了我的答案。 – the4kman