【问题标题】:DATAStack library in existing app with working core-data现有应用程序中具有工作核心数据的 DATAStack 库
【发布时间】:2016-07-12 13:41:58
【问题描述】:

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

如果没有 DATAStack,我的 AppDelegate 中有这些标准核心数据 lazy vars。在我的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 中,我将上面描述的var moc = ... 替换为let moc = (UIApplication.sharedApplication().delegate as! AppDelegate).dataStack.mainContext。这个moc 变量再次被传递,我在下面的某个地方调用moc.save(),但现在它不存储任何东西。正如我所描述的,唯一改变的是托管对象上下文的来源。

我一定在这个库中遗漏了一些东西,但我不知道我遗漏了什么。

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

【问题讨论】:

    标签: ios swift sqlite core-data


    【解决方案1】:

    显然你不应该使用mainContext 来保存,而总是使用新的背景上下文。因此,获得正确 moc 的唯一方法是:

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

    【讨论】:

      猜你喜欢
      • 2020-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-09
      • 2010-12-04
      • 1970-01-01
      • 2019-03-26
      相关资源
      最近更新 更多