搜索了整个Internet,但找不到适合我的问题的现代解决方案。 我想通过可可绑定将NSObjectController与Core Data结合使用,并努力正确地进行设置。值得注意的是,我正在使用最新版本的Xcode和Swift。
我所做的事情:
出于测试目的,我已执行以下操作:
就这样。
第一组问题:我做错了什么,如果不是完全错误的方法,该如何解决?
我在stackoverflow上读过一些文章,这样可以自动保存和从Core Data模型获取数据。这就是为什么我认为它应该可以工作的原因。
这是第二组问题: 是真的吗 如果是这样,为什么在显示视图时未填充文本字段? 如果不是,那么如何实现(尝试编写尽可能少的代码)?
第三个问题:如果我使用的方法完全错误,有人会帮助我使用Cocoa绑定连接Core Data和NSObjectController并向我展示使用尽可能少的代码编写的方法正确的方法?
考虑到野外没有关于该主题的新文章,我认为正确的答案可能会帮助正在开发macOS应用程序的许多人。
谢谢!
答案 0 :(得分:1)
我认为您的基本方法是正确的,尽管重要的是要了解您需要一个 real 对象(一个实例)才能使其正常工作。
创建NSManagedObject子类通常是可取的,并且几乎总是在实际项目中完成的,因此您可以定义和使用属性。现在,您可以在Xcode的Project Navigator中选择数据模型,然后单击菜单: Editor > 创建NSManagedObject子类…,轻松地做到这一点。从技术上讲,这是没有必要的,并且在演示或概念验证中,您经常会混淆使用NSManagedObject。
假设您正在使用所描述的Xcode项目模板,其中AppDelegate
具有属性managedObjectContext
,则AppDelegate类中的以下函数将维护,在必要时创建并返回我所谓的内容单个对象 –特定实体的对象,在这种情况下为Employee
,您的应用要求该实体在商店中必须只有一个。
@discardableResult func singularEmployee() -> NSManagedObject? {
var singularEmployee: NSManagedObject? = nil
let fetchRequest: NSFetchRequest<NSManagedObject> = NSFetchRequest(entityName: "Employee")
let objects = try? self.managedObjectContext.fetch(fetchRequest)
singularEmployee = objects?.first
if singularEmployee == nil {
singularEmployee = NSEntityDescription.insertNewObject(forEntityName: "Employee", into: self.managedObjectContext)
}
return singularEmployee
}
然后,将这一行代码添加到applicationDidFinishLaunching
singularEmployee()