现有应用程序中的DATAStack库具有工作核心数据

时间:2016-07-12 13:41:58

标签: ios swift sqlite core-data

我有一个应用程序,其中我已经具有工作核心数据和持久存储功能。我想在这个应用程序中使用DATAStack,但我无法让它工作。

如果没有DATAStack,我的lazy var中有这些标准核心数据AppDelegate。在我的ViewController中,我检索了managedObjectContext,如下所示:let moc = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext。将moc变量传递给负责存储的函数,并在线下的某处调用moc.save()。我知道这是有效的,因为我还检索并显示屏幕上存储的条目,这在完全关闭应用程序后也可以工作。我用sqlite数据库查看器(SQLPro for SQLite只读)检查sqlite数据库。

现在通过DATAStack,我在AppDelegate中添加了一个新行:lazy var dataStack: DATAStack = DATAStack(modelName: "Database")。我的数据库模型的名称确实是Database.xcdatamodeld所以初始化应该是正确的。在我的ViewController我用var moc = ...替换了上述let moc = (UIApplication.sharedApplication().delegate as! AppDelegate).dataStack.mainContext。再次,这个moc变量被传递,我在行的某处调用moc.save(),但现在它不存储任何东西..正如我所描述的,唯一改变的是托管对象上下文来自。

我必须错过这个库的东西,但我不知道我错过了什么。

我还查看了Sync exampleSync使用DATAStack),但dataStack对象在那里以完全不同的方式被检索。

1 个答案:

答案 0 :(得分:0)

显然你不应该使用mainContext来保存,但总是使用新的背景环境。所以获得正确的moc的唯一方法是:

dataStack.performInNewBackgroundContext() { moc in
    //Do things with moc and call moc.save() somewhere
}