Core data swift核心数据获取关系

Core data swift核心数据获取关系,core-data,swift,ios8,relationship,xcode6gm,Core Data,Swift,Ios8,Relationship,Xcode6gm,在swift中尝试从coredata获取关系数据时,我有点困惑 个人实体 包含人名和唯一Id。与书籍的关系是一对多 比如说 Person Entity: idPerson = 25 - namePerson = John idPerson = 26 - namePerson = Steve Books Entity: idBook = 2543 - titleBook = title one - personBook = 25 idBook = 2544 - titleBook = tit

在swift中尝试从coredata获取关系数据时,我有点困惑

个人实体 包含人名和唯一Id。与书籍的关系是一对多

比如说

Person Entity: 
idPerson = 25 - namePerson = John
idPerson = 26 - namePerson = Steve
Books Entity: 
idBook = 2543 - titleBook = title one - personBook = 25
idBook = 2544 - titleBook = title two - personBook = 25
idBook = 2545 - titleBook = title three - personBook = 26
图书实体包含图书标题、图书的唯一Id以及与个人(personBook)的关系Id。与人的关系是一对一的 比如说

Person Entity: 
idPerson = 25 - namePerson = John
idPerson = 26 - namePerson = Steve
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为每本书获取相关的namePerson


多谢各位

您的
图书
实体不需要属性
personBook

让我们创建一个
Person
managedObject(使用Swift 1.0):

创建
Books
managedObject时,可以将其链接到
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()
}
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)
}
现在,当您想获取
书籍
时,可以执行以下操作:

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()
}
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)
}

如果我正确理解了您的问题/数据结构,您将希望执行以下操作:

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

谢谢@POB,但是coredata是从json保存的,然后由应用程序获取。例如,今天你只收到一个新人和50本书,我试着更好地解释。该应用程序在不同的时间更新两个实体,而不是json。我的主要问题是。。。。当我获取Books实体(例如在表视图或集合视图中)时,我可以将Books实体与idPerson=personBook的person实体连接,以检索bookTitle和关联的namePerson。谢谢