2017-09-04 91 views
0

我使用swift 4處理macOS。 我使用的核心數據有兩個實體:swift創建記錄並將關係添加到關係

  • 人(與書的關係)
  • 書(與人的關係)

NSManagedObject人

import CoreData 

@objc(Person) 
public class Person: NSManagedObject { 
    @NSManaged public var firstName: String! 
    @NSManaged public var books: NSSet 
} 

NSManagedObject Book

import CoreData 

@objc(Book) 
public class Book: NSManagedObject { 
    @NSManaged public var bookName: String! 
    @NSManaged public var date: DateString! 
    @NSManaged public var person: Person? 
} 

與此代碼我創建了一個新的個人記錄:

let entity = NSEntityDescription.entity(forEntityName: "Person", in: context) 
let newPerson = NSManagedObject(entity: entity!, insertInto: context) as! Person 

newPerson.firstName = "Max" 

do { 
    try context.save() 
} catch {print(error)} 

現在我想如果我創建一個新的個人記錄=> BOOKNAME =「測試」直接創建一個新的記錄成冊,日期=日期()

這可能與我使用的代碼newPerson.books = ? 還是我使用相同的代碼「新的個人記錄」(點點修改)創建一本書記錄?

+0

您還可以設置書籍記錄'let book = ...','book.person = newPerson' – Alladinian

+0

的關係,但我更喜歡在創建人時創建新書的方式。我如何使用現有的代碼創建一本書記錄? – Ghost108

+0

與人相同的方式...'let bookEntity = NSEntityDescription.entity(forEntityName:「Book」,in:context);讓newBook = NSManagedObject(entity:bookEntity !, insertInto:context)as! Book' – Alladinian

回答

0

您無法自動創建新的Book創建。你需要有創建實例的代碼。你有幾個選擇:

  1. 這樣做就像你的代碼上面。每當您創建新的Person時,請按照代碼創建Book
  2. 覆蓋awakeFromInsert在您的Person類。在您的覆蓋中,添加代碼以創建新的Book。現在您可以使用您當前的代碼創建一個新的Person,並且每個新的Person將在首次創建時創建一個新的Book