如何将我的阵列控制器绑定到我的核心数据模型?

How do I bind my Array Controller to my core data model?

我是 SWIFT 编程的新手,我正在尝试做一个简单的应用程序来学习使用核心数据并将其绑定以显示在应用程序中。我看过很多例子,但似乎都过时了。我在 XCode 9.

工作

我开始使用带有 Core Data 的 MacOS Cocoa 应用程序。我有一个名为 "Workout" 的简单实体,具有 4 个属性日期、秒、运动和 rpe。

然后我在视图控制器场景下添加了一个Array Controller。我添加了一个 Table 视图,它将 Array Controller 设置为数据源。我添加了用于添加和删除的按钮 linking 到数组控制器添加和删除方法。

我想我现在需要做的就是将 Array Controller 绑定到我的核心数据模型的 managedObjectContext。这可以在 AppDelegate 中找到。但是,当我 select 数组控制器并转到绑定和 select 参数时,绑定到的唯一选项是 "View Controller" 和 "Shared User Defaults Controller"。我已经 select 编辑了 View Controller,但无法找到 link 到我的数据模型的模型关键路径。

我觉得我一定遗漏了一些明显的东西。我觉得必须有一种方法可以绑定到 AppDelegate 或来自视图控制器的模型键路径,但我也无法弄清楚。非常感谢任何帮助。

在基于故事板的项目中,没有从视图控制器到 AppDelegate class 的(绑定)引用。

解决方案是在视图控制器中添加 属性 并覆盖 init?(coder

@objc let managedObjectContext: NSManagedObjectContext

required init?(coder: NSCoder) {
    self.managedObjectContext = (NSApp.delegate as! AppDelegate).persistentContainer.viewContext
    super.init(coder: coder)
}

然后将 ManagedObjectContext 绑定到 ViewController -> managedObjectContext.

在数组控制器的属性检查器中不要忘记将Mode设置为Entity Name,插入实体名称并检查Prepares Content

要修复 [<Core_Data_Binding.ViewController 0x6080000c4600> valueForUndefinedKey:]: this class is not key value coding-compliant for the key managedObjectContext,请将 vadian 代码中的 let managedObjectContext: NSManagedObjectContext 更改为 @objc let managedObjectContext: NSManagedObjectContext。 XCode 9 默认不向 Objective C 公开属性和方法: The use of Swift 3 @objc inference in Swift 4 mode is deprecated?