gpt4 book ai didi

swift - NSPersistentCloudKitContainer 和持久历史跟踪

转载 作者:行者123 更新时间:2023-12-05 03:27:25 26 4
gpt4 key购买 nike

我正在构建一个使用 NSPersistentCloudKitContainer 的应用程序。该应用程序没有共享功能,其唯一的后端功能是使用 cloudkit 容器在用户设备之间同步数据。该设置相当准系统,实例化一个容器,设置单个商店描述,然后加载商店。

我的大问题:我需要对持久历史跟踪做些什么吗?我还没有找到这个问题的具体答案,但据我所知,持久历史跟踪用于将一个目标中发生的更改(例如扩展)合并到另一个目标中。听起来我不需要它来充分利用 iCloud 同步。

最佳答案

您确实需要启用持久的历史记录跟踪,以便在用户通过关闭您的应用程序对 iCloud Drive 的访问或通过您的某些功能启用/禁用/重新启用您的应用程序使用 iCloud 时,设备能够 catch 已经实现。

NSPersistentCloudKitContainer 使用历史记录并在幕后为您处理。您不需要对历史做任何事情,尽管您可以根据需要进行操作。 Apple Docs 在这一点上有点模糊。

我所做(和部署)的是在应用程序中为用户提供一个开关,以允许他们启用/禁用应用程序对 iCloud 的使用。它特定于该设备上的应用程序,并且该设置不会通过普遍存在的默认设置保留到任何其他设备。我不想鼓励他们禁用他们的主要备份源。它所做的所有禁用操作都是将容器标识符设置为 nil,并在启用时设置为容器 ID 字符串,如下所示。 Apple 开发者论坛上的一位 Apple CloudKit 工程师表示可以这样做。当用户翻转它时,我指示他们完全重启应用程序。到目前为止它似乎无害,并且在我所有的测试中它工作正常。

像这样设置您的 CoreData 堆栈:

@objc func initCoreDataStack()
{
guard let description = pc.persistentStoreDescriptions.first else {
fatalError("*** CoreDataUtil - could not find persistent store description.")
}
description.setOption(true as NSNumber, forKey:NSPersistentHistoryTrackingKey)
description.setOption(true as NSNumber, forKey:NSPersistentStoreRemoteChangeNotificationPostOptionKey)

//
// If user wants iCloud Storage set id, else set it to nil
// but with history on (see above) so that if they enable it
// later there is a history of changes.
//
if(useiCloud == true) {
let cloudKitContainerIdentifier = "iCloud.your.container"
let options = NSPersistentCloudKitContainerOptions(containerIdentifier:cloudKitContainerIdentifier)
description.cloudKitContainerOptions = options
}
else {
description.cloudKitContainerOptions = nil
}

pc.persistentStoreDescriptions.first?.url = storeURL()
pc.viewContext.automaticallyMergesChangesFromParent = true
pc.loadPersistentStores { _, error in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
// Set this here so that updates by consumers are dynamic
self.pc.viewContext.automaticallyMergesChangesFromParent = true
// My code does this for consumers of this singleton.
self.sendMOCReadyNotificationForPlatform()
}
}

关于swift - NSPersistentCloudKitContainer 和持久历史跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71492385/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com