-1

我在 AppStore 上发布了一个基于 cosmicmind 图形数据库的应用程序。它将数据本地保存在共享沙箱中,以便与今天的扩展共享数据库。在新的更新中,我尝试添加 CloudKit 功能并且效果很好,但我有两个问题。我希望已经拥有该应用程序的用户可以同步本地存储在 iCloud 数据库中的数据,但我真的不知道该怎么做。第二个问题是今天的扩展。由于云数据存储在第二个 SQLite 文件中,以前运行良好的扩展现在返回一个空数组。任何帮助将不胜感激!谢谢

编辑感谢您的快速回答。这是我在数据管理器中本地使用的代码:

func startDataManager() {

    let search = Search<Entity>(graph: databaseManager2).for(types: "ElencoItem")
    elencoItems = search.sync(completion: nil)
}

这是我现在与 icloud 一起使用的代码:

 func startDataManager() {
    databaseManager = Graph(cloud: "MyContainer", completion: { (done, error) in

        if done {
            debugPrint("ok")
            let search = Search<Entity>(graph: self.databaseManager).for(types: "ElencoItem")
            self.elencoItems = search.sync()

        } else {
            guard let error = error else { return }
            debugPrint("error iCloud: \(error.localizedDescription)")
        }
    })

我还添加了所有委托方法,并且效果很好。

我用今天的扩展解决了这个问题。问题是扩展没有看到为云版本保存的数组。我是这样保存的:

  let nuovo = Entity(type: "ElencoItem", graph: DataManager.shared.databaseManager)
  nuovo["value"] = value

现在我将云数据保存到一个新数组中,例如:

        let search = Search<Entity>(graph: DataManager.shared.databaseManager).for(types: "ElencoItem")
        for item in search.sync() { {

        let nuovo = Entity(type: "ElencoItem")
        nuovo["value"] = item["value"]

        DataManager.shared.elenco.append(nuovo)
        DataManager.shared.databaseManager2.sync()
    }

并且扩展效果很好。

我现在正在尝试将本地保存的数据迁移到云端,但它不起作用。数据在本地保存如下:

   let nuovo = Entity(type: "ElencoItem")
   nuovo["value"] = value

我执行与上述相同的操作以将数据移动到云保存,例如:

            let search = Search<Entity>(graph: self.databaseManager10).for(types: "ElencoItem")
            for item in search.sync() {

            let nuovo = Entity(type: "ElencoItem", graph: DataManager.shared.databaseManager)
            nuovo["value"] = item["value"]

            DataManager.shared.elencoItems.append(nuovo)
            DataManager.shared.databaseManager.sync()
            print(DataManager.shared.elencoItems)
        }

当我在 for 循环之后打印数组时,我可以看到所有数据,但在关闭应用程序后,我再也找不到数据了。有什么解决办法吗?谢谢

4

2 回答 2

0

因此 Graph 具有与 iCloud 的同步机制。如果你使用它,你只需要编写一个迁移函数来移动你的数据,然后更新你的应用程序以接入 iCloud API。对于今天的扩展......不确定那是什么。

于 2017-05-18T21:53:25.497 回答
0

问题解决了。我将迁移功能从数据管理器移动到加载的第一个视图控制器,删除了打印语句,它工作得很好!

于 2017-05-31T07:49:19.610 回答