2017-09-21 61 views
0

我是SWIFT编程新手,想要做一个简单的应用来学习如何使用核心数据并将其绑定到应用中。我已经看过大量的例子,但都看起来很老了。我在XCode 9工作。如何将我的阵列控制器绑定到我的核心数据模型?

我开始使用Core Data的MacOS Cocoa应用程序。我有一个名为“Workout”的简单实体,包含4个属性date,seconds,sport和rpe。

然后我在视图控制器场景下添加了一个数组控制器。我添加了一个将数组控制器设置为数据源的表视图。我添加了按钮来添加和删除链接到阵列控制器添加和删除方法。

我想我现在需要做的就是将数组控制器绑定到我的核心数据模型的managedObjectContext。这可以在AppDelegate中找到。但是,当我选择阵列控制器并转到绑定并选择参数时,唯一要绑定的选项是“视图控制器”和“共享用户默认控制器”。我选择了视图控制器,但无法找出模型关键路径来链接到我的数据模型。

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

回答

1

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

一个解决办法是增加一个属性,并在视图控制器

@objc let managedObjectContext: NSManagedObjectContext 

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

重写init?(coder然后结合到ManagedObjectContextViewController - >managedObjectContext

在阵列控制器的属性督察不要忘记设置ModeEntity Name,插入实体名称,并检查Prepares Content

+0

感谢您的快速响应。我把下面的代码放在视图控制器中,因为我的AppDelegate没有managedObjectContext参数:required init?(coder:NSCoder){self.managedObjectContext =(NSApp.delegate as!AppDelegate).persistentContainer.newBackgroundContext() super。 init(编码器:编码器) }。仍然收到错误:[ valueForUndefinedKey:]:此类不是关键字managedObjectContext的编码兼容的值。 –

+0

我更新了答案,以考虑“NSPersistentContainer”语法并修复KVC问题 – vadian

+0

谢谢。多数民众赞成在帮助我,因为我使用.newBackgroundContext(),而不是.viewContext –

0

修复[<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?

+0

谢谢你的错了几天。这让它运行。 –

相关问题