在运行时切换 iCloud 同步
Toggle iCloud sync during runtime
我有一个 SwiftUI 应用程序,用户可以在其中通过应用内购买购买一些高级功能。其中一项功能是在更多设备上进行 iCloud 同步。我正在使用 CoreData 来保存用户数据。
我的持久容器:
lazy var persistentContainer: NSPersistentCloudKitContainer = {
let container = NSPersistentCloudKitContainer(name: "store name")
let description: NSPersistentStoreDescription? = container.persistentStoreDescriptions.first
let remoteChangeKey: String = "NSPersistentStoreRemoteChangeNotificationOptionKey"
if(description != nil) {
description!.setOption(true as NSNumber, forKey: NSPersistentHistoryTrackingKey)
description!.setOption(true as NSNumber, forKey: remoteChangeKey)
}
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
return container
}()
我的问题是如何在用户购买订阅时切换 on/off 云同步。我不希望用户必须重新启动应用程序。
我还希望用户可以在应用内设置中切换此设置。
谢谢
将您的变量声明为 NSPersistentContainer
而不是 NSPersistentCloudKitContainer
。启动时,如果用户有云同步,加载云工具包持久容器,否则加载非云工具包。
切换开关后,按照相同的规则重新加载容器。要重新加载容器,我会将 属性 添加到管理器对象,我会在其中添加一些根据用户设置重新加载容器的方法。
我有一个 SwiftUI 应用程序,用户可以在其中通过应用内购买购买一些高级功能。其中一项功能是在更多设备上进行 iCloud 同步。我正在使用 CoreData 来保存用户数据。 我的持久容器:
lazy var persistentContainer: NSPersistentCloudKitContainer = {
let container = NSPersistentCloudKitContainer(name: "store name")
let description: NSPersistentStoreDescription? = container.persistentStoreDescriptions.first
let remoteChangeKey: String = "NSPersistentStoreRemoteChangeNotificationOptionKey"
if(description != nil) {
description!.setOption(true as NSNumber, forKey: NSPersistentHistoryTrackingKey)
description!.setOption(true as NSNumber, forKey: remoteChangeKey)
}
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
return container
}()
我的问题是如何在用户购买订阅时切换 on/off 云同步。我不希望用户必须重新启动应用程序。 我还希望用户可以在应用内设置中切换此设置。
谢谢
将您的变量声明为 NSPersistentContainer
而不是 NSPersistentCloudKitContainer
。启动时,如果用户有云同步,加载云工具包持久容器,否则加载非云工具包。
切换开关后,按照相同的规则重新加载容器。要重新加载容器,我会将 属性 添加到管理器对象,我会在其中添加一些根据用户设置重新加载容器的方法。