【问题标题】:Cloudkit + CoreData and uploading to iCloud in earlier iOS versionsCloudkit + CoreData 并在早期 iOS 版本中上传到 iCloud
【发布时间】:2021-04-25 02:56:54
【问题描述】:

TLDR

如何在 iOS 13 之前的 iOS 版本中将 cloudkit 与核心数据一起使用?


我正在构建一个可在 iOS 12+ 上运行的应用。
我使用核心数据,我也希望能够在 iCloud 中上传数据。我在可用时使用NSPersistentCloudKitContainer 设置了持久化容器,但我仍然有一些疑问。 我目前这样管理存储:

 //MARK: PersistentContainer
    lazy var persistentContainer: NSPersistentContainer = {
        let containerURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: CoreHelp.appGroup)!
        let storeURL = containerURL.appendingPathComponent(CoreHelp.sql)
        let description = NSPersistentStoreDescription(url: storeURL)
        
        if #available(iOS 13.0, *) { //ios 13+
            let container = NSPersistentCloudKitContainer(name: CoreHelp.appName)
            container.loadPersistentStores(completionHandler: {
                (storeDescription, error) in
                if let error = error as NSError? {
                    fatalError("Unresolved error \(error), \(error.userInfo)")
                }
            })
            description.setOption(true as NSObject, forKey: NSPersistentStoreRemoteChangeNotificationPostOptionKey)
            container.viewContext.automaticallyMergesChangesFromParent = true
            container.viewContext.mergePolicy = NSMergeByPropertyStoreTrumpMergePolicy
            return container
        } else { //less than iOS 13
            let container = NSPersistentContainer(name: CoreHelp.appName)
            container.loadPersistentStores(completionHandler: { (storeDescription, error) in
                if let error = error as NSError? {
                    fatalError("Unresolved error \(error), \(error.userInfo)")
                }
            })
            container.viewContext.automaticallyMergesChangesFromParent = true
            container.viewContext.mergePolicy = NSMergeByPropertyStoreTrumpMergePolicy
            return container
        }
    }()

//Where CoreHelp. … is a struct containing different ids.

这可行(至少在 iOS 13+ 上),但我很难找出正确的设置方法。这些是我的主要担忧:

  • 我是否必须检查/询问用户是否要启用云同步,还是根据他们的手机设置自动检查?

  • 如果用户不想将数据同步到云端,是否需要改用 NSPersistentContainer?

  • iOS 13 之前发布的版本不支持 NSPersistentCloudKitContainer。如何使用 CloudKit 同步/上传 iOS 12 用户保存的数据(可能仍在使用 CoreData)?

我阅读了这些内容以及更多内容:
Using Core Data, iCloud and CloudKit for syncing and backup and how it works together
CloudKit and Core sync data between devices

但现在情况发生了变化。

【问题讨论】:

    标签: ios swift core-data icloud cloudkit


    【解决方案1】:

    答案 tl;dr 是您通过大量独立工作来做到这一点,我个人不能保证会成功。 iOS 12 或更低版本不支持具有 Core Data 的 CloudKit。

    最可能的情况是使用 CloudKit 的 JavaScript 接口,可能使用自定义服务器来托管 JS 代码。具体细节由您决定,但有一个Ray Wenderlich tutorial 可以帮助您入门。祝你好运。

    如果这不起作用,对于您支持的所有 iOS 版本,您最好的选择可能是第三方 Ensembles 框架,而不是 Apple 内置的 CloudKit 支持。它可以与 iCloud 或其他同步服务一起使用。我已经将它与 CloudKit 一起使用,它很可靠。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-23
      • 2015-06-01
      • 2017-02-27
      • 1970-01-01
      相关资源
      最近更新 更多