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



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

没有 DATAStack,我的AppDelegate里有所有这些标准的核心数据lazy var。在我的ViewController中,我像这样检索了managedObjectContextlet moc = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext .将 moc 变量传递给负责存储的函数,并在行的某个地方调用moc.save()。我知道这有效,因为我还会检索并在屏幕上显示存储的条目,这在完全关闭应用程序后也可以工作。我用sqlite数据库查看器(SQLPro for SQLite Read-Only)检查sqlite数据库。

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

我一定错过了这个图书馆的东西,但我不知道我错过了什么。

我还看过一个同步示例(同步使用 DATAStack),但dataStack对象在那里以完全不同的方式检索。

显然,

您不应该使用mainContext来保存,而应该始终使用新的背景上下文。因此,获得正确 moc 的唯一方法是这样的:

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

最新更新