Быстрое получение данных о данных ядра

Я немного запутался, попытаюсь получить данные отношения из coredata в swift

Сущность лица содержит имя человека и уникальный идентификатор. Отношение с книгами - ONE to Many

Например

Person Entity: 
idPerson = 25 - namePerson = John
idPerson = 26 - namePerson = Steve

Объект Книги содержит название книг, уникальный идентификатор книги и идентификатор отношения с человеком (personBook). Отношение с Лицом - ОДИН К ОДНОМУ Например

Books Entity: 
idBook = 2543 - titleBook = title one - personBook = 25
idBook = 2544 - titleBook = title two - personBook = 25
idBook = 2545 - titleBook = title three - personBook = 26

вот мой снимок экрана модели данных: (нет изображения, потому что у меня нет репутации)

Класс персонажа

        @objc(Person)
        class Person: NSManagedObject {
              @NSManaged var idPerson: String
              @NSManaged var namePerson: String
              @NSManaged var booksRel: NSSet

        }

Класс книг

        @objc(Books)
        class Books: NSManagedObject {
              @NSManaged var bookTitle: String
              @NSManaged var idBook: String
              @NSManaged var personBook: String
              @NSManaged var personRel: Person

        }

Код выбора

    let appDel:AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
    let context:NSManagedObjectContext = appDel.managedObjectContext!

    let request = NSFetchRequest(entityName: "Books")
    request.returnsObjectsAsFaults = false

    request.fetchLimit = 30

    ////////////////////////////
    // CODE TO JOIN Person entity WHERE personBook = idPerson
    ////////////////////////////

    var results:NSArray = context.executeFetchRequest(request, error: nil)!

    for temp in results {
         var data = temp as Books
         ///////////////////////////////////////
         //println(data.namePerson) ----> not working
         ///////////////////////////////////////
    }

возможно получить для каждой книги родственное имяПерсона на основе namePerson = personBook?

Большое спасибо!

Ответ 1

Вам не нужно свойство personBook для вашей сущности Books.

Давайте создадим управляемый объект Person (используя Swift 1.0):

let person = NSEntityDescription.insertNewObjectForEntityForName("Person", inManagedObjectContext: context) as Person
person.idPerson = 23
person.namePerson = "John"

var error: NSError?
if !context.save(&error) {
    println("Unresolved error \(error), \(error!.userInfo)")
    abort()
}

Когда вы создаете управляемый объект Books, вы можете связать его с person следующим образом:

let book = NSEntityDescription.insertNewObjectForEntityForName("Books", inManagedObjectContext: context) as Books
book.bookTitle = "My book Title"
book.idBook = 2547
book.personRel = person

var error: NSError?
if !context.save(&error) {
    println("Unresolved error \(error), \(error!.userInfo)")
    abort()
}

Теперь, когда вы хотите сделать выборку на Books, вы можете сделать так:

let fetchRequest = NSFetchRequest(entityName: "Books")
var error: NSError?
var booksArray = context.executeFetchRequest(fetchRequest, error:&error)
if let error = error {
    println("Unresolved error \(error), \(error.userInfo)")
    abort()
}

for book in booksArray as [Books] {
    let person = book.personRel as Person

    println(person.namePerson)
    println(person.idPerson)
}

Ответ 2

Если я правильно понял вашу структуру вопросов/данных, вам нужно сделать что-то вроде:

let fetchRequest = NSFetchRequest(entityName: "Books")
let bookPersonPredicate = NSPredicate(format: "personRel.idPerson == %@", person.idPerson)
fetchRequest.predicate = bookPersonPredicate