我在 macOS 上使用 swift 4。 我将核心数据与两个实体一起使用:
- 人(与图书有关系)
- 书籍(与人有关)
NSManagedObject 人
import CoreData
@objc(Person)
public class Person: NSManagedObject {
@NSManaged public var firstName: String!
@NSManaged public var books: NSSet
}
NSManagedObject 书
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)}
现在,如果我创建一个新的人员记录,我想直接在 Book 中创建一个新记录 => bookName="Test", date=Date()
我使用的代码可以实现这一点newPerson.books = 吗?
或者我是否使用相同的代码“新人记录”(稍作修改)来创建图书记录?
最佳答案
您无法自动创建新的Book
。您需要拥有创建实例的代码。您有几个选择:
- 就像上面的代码一样。每当您创建一个新的
Person
时,请在其后面添加创建Book
的代码。 - 重写
Person
类上的awakeFromInsert
。在您的覆盖中,添加代码以创建新的Book
。现在,您可以使用当前代码创建一个新的Person
,并且每个新的Person
在您首次创建时都会创建一个新的Book
。<
关于快速创建记录并将记录添加到关系中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46035028/