快速创建记录并将记录添加到关系中

标签 swift macos cocoa core-data

我在 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。您需要拥有创建实例的代码。您有几个选择:

  1. 就像上面的代码一样。每当您创建一个新的Person时,请在其后面添加创建Book的代码。
  2. 重写 Person 类上的 awakeFromInsert。在您的覆盖中,添加代码以创建新的 Book。现在,您可以使用当前代码创建一个新的 Person,并且每个新的 Person 在您首次创建时都会创建一个新的 Book。<

关于快速创建记录并将记录添加到关系中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46035028/

相关文章:

ios - 带有 URL 的 NSAttributedString 不起作用

macos - 激活其他应用程序 - OSX

objective-c - 为什么有些对象在 objective-c 中使用前不需要初始化?

swift - Mac 托盘应用程序的全局键盘快捷键

swift - UICollectionViewCell alpha 在使用 '.reloadItems' 时没有改变

macos - 从环境变量中删除路径

python - 如何在 Mac 终端中使用命令行参数运行 exe 文件?

cocoa - 父窗口和子窗口

objective-c - 激活 WebView 键盘事件

ios - 将文件从 bundle 复制到 Libraries 文件夹(IOS 10、Swift 3、xcode 8.2)