【问题标题】:CosmicMind Graph + iCloud and Today ExtensionCosmicMind Graph + iCloud 和 Today Extension
【发布时间】:2017-05-18 19:02:31
【问题描述】:

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

【问题讨论】:

    标签: graph icloud cosmicmind


    【解决方案1】:

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

    【讨论】:

    • 我编辑了这个问题,以展示我是如何尝试迁移数据的。你能告诉我有什么问题吗?谢谢
    • 经过多次测试,将迁移函数移动到不同的位置,我得到以下错误:“致命错误:[Graph Error: Cannot get Permanent objectID]”。真不知道怎么解决。知道@CosmicMind 吗?谢谢
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多