【发布时间】: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