CosmicMind Graph + iCloud 和 Today Extension

Posted

技术标签:

【中文标题】CosmicMind Graph + iCloud 和 Today Extension【英文标题】:CosmicMind Graph + iCloud and 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 循环之后打印数组时,我可以看到所有数据,但在关闭应用程序后,我再也找不到数据了。 有什么解决办法吗? 谢谢

【问题讨论】:

【参考方案1】:

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

【讨论】:

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

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

【讨论】:

以上是关于CosmicMind Graph + iCloud 和 Today Extension的主要内容,如果未能解决你的问题,请参考以下文章

CosmicMind / Graph:搜索特定的相关实体

cosmicmind 水平布局子项不显示

CosmicMind/Material - 如何在 NavigationDrawerController 中调用 pushViewController?

在 CosmicMind 的材料中使用运动

如何使用 Material (CosmicMind) 实现开关动作

CosmicMind/Material : 如何在 iOS 中更改 CheckButton 选定颜色