Swift,故事板和核心数据......缺少持久存储协调器?

时间:2014-09-10 21:22:11

标签: cocoa core-data swift interface-builder

我正在使用Swift,核心数据和故事板开发一个新的Cocoa项目,并且遇到了一个对我来说毫无意义的问题。经过一些相当广泛的狩猎,包括在这个网站上,我得出结论,我必须遗漏一些明显的东西,但无法弄清楚是什么。以下是我到目前为止所做的事情:

1.使用Swift,Storyboards和Core Data创建一个新项目Cocoa Application。 2.在.xcdatamodeld中创建实体。我们称之为数据集。 3.创建NSSplitViewController的子类(我想在程序的其余部分中执行此操作)。 4.将主窗口的窗口内容设置为myVC的实例。我检查了,它加载并显示正常。 5.在viewController.swift中,像这样获取managedObjectContext:

@IBOutlet var moc:NSManagedObjectContext!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do view setup here.

    let appDelegate = NSApplication.sharedApplication().delegate as AppDelegate

   moc = appDelegate.managedObjectContext


    println("mainsplitviewcontroller moc:")
    println(moc)
    println("mainsplitviewcontroller psc:")
    println(moc.persistentStoreCoordinator)




     NSLog("Main split view loaded")
}

(是的,我有关于依赖注入,但我想先解决这个问题。)

  1. 在IB中,将一个managedObjectContext对象放在View Controller实例中。

  2. 在IB中,将变量moc的myVC出口连接到managedObjectContext。

  3. 在IB中,创建一个阵列控制器。将其设置为实体。实体名称是数据集。启用“准备内容”。

  4. 无论是作为插座还是绑定,都要将阵列控制器连接到MOC。使用outlet,只需从其中的托管对象上下文中右键单击弹出即可拖动到上面6中创建的MOC的图标。对于绑定,旧的方式,转到绑定选项卡,并在参数下,绑定到:(查看控制器),模型键路径:moc。 (moc来自上面的5)

  5. 然后,我建立并运行。我收到错误:"无法执行操作,因为托管对象上下文没有持久性存储协调器。"

    无论我在上面尝试做什么,都会发生这种情况。

    现在,从我的println语句来看,app delegate和viewcontroller中引用的对象对于托管对象上下文和持久性存储控制器都是相同的,如下所示:

    appdelegate moc: appdelegate psc: mainsplitviewcontroller moc: mainsplitviewcontroller psc:

    我希望我可以展示图片,但我是新来的,所以不能这样做。我做错了吗?我以为我理解了这个过程:确保VC可以访问MOC,然后将MOC对象放入IB的VC窗口,使其成为插座,并将其连接到阵列控制器。为什么视图控制器的swift文件似乎表明PSC与app委托相同,但在IB中,阵列控制器认为MOC根本没有PSC?

    感谢阅读!

1 个答案:

答案 0 :(得分:2)

我不知道这是否会有所帮助,但我对您的项目显示错误并不感到惊讶。您有两个托管对象上下文 - 一个由您的应用程序委托创建,另一个由故事板创建。您的接口代码正在连接到第二个MOC,该MOC未连接到您的持久存储。