首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSUbiquitousKeyValueStore花费的时间太长,无法进行初始同步

NSUbiquitousKeyValueStore花费的时间太长,无法进行初始同步
EN

Stack Overflow用户
提问于 2018-01-10 04:20:52
回答 1查看 310关注 0票数 1

我想使用NSUbiquitousKeyValueStoreiCloud中存储一些简单的键值对,用于我正在制作的游戏。我的印象是,如果用户删除,然后重新安装游戏,他们的进步将恢复时,应用程序启动。

情况似乎并非如此。根据我所做的测试,在应用程序的第一次发布时,从iCloud下载键值对需要很长时间。之后,这些数据似乎几乎立即就被上传和下载了。这会给我的应用程序带来问题,因为当它重新安装时,它不会立即拥有用户以前的数据,并创建一个新的数据集,从而否定了使用NSUbiquitousKeyValueStore的意义。

是否有办法确保NSUbiquitousKeyValueStore的信息在应用程序第一次发布后尽快可用,如果不是,我还可以使用什么其他iCloud API?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-04 21:28:19

为了确保在应用程序第一次发布后,NSUbiquitousKeyValueStore提供的信息能够尽快获得。你需要做两个步骤。

  • 步骤1:-在应用程序启动期间注册NSUbiquitousKeyValueStoreDidChangeExternallyNotification通知。
  • 步骤2:-调用实例方法 NSUbiquitousKeyValueStore.default.synchronize()调用此方法的推荐时间是在应用程序启动或返回到前台时。

例如:-

代码语言:javascript
复制
override func viewDidLoad() {
    super.viewDidLoad()

    NotificationCenter.default.addObserver(self, selector: #selector(ubiquitousKeyValueStoreDidChange), name: NSUbiquitousKeyValueStore.didChangeExternallyNotification, object: NSUbiquitousKeyValueStore.default)
    NSUbiquitousKeyValueStore.default.synchronize()
    // referesh and retrieve keys 
}

@objc func ubiquitousKeyValueStoreDidChange(notification:Notification) {
// Get the reason for keys changed
    let changeReason = notification.userInfo![NSUbiquitousKeyValueStoreChangeReasonKey] as! Int

 // get keys changed.

        let changeKeys = notification.userInfo![NSUbiquitousKeyValueStoreChangedKeysKey] as! [String]     

   switch changeReason {
    case NSUbiquitousKeyValueStoreInitialSyncChange, NSUbiquitousKeyValueStoreServerChange, NSUbiquitousKeyValueStoreAccountChange:
 // referesh and retrieve keys 
    case NSUbiquitousKeyValueStoreQuotaViolationChange:
 // Reduce Data Stored
    }

}

注意:所有类型的iCloud存储,例如,NSUbiquitousKeyValueStore只提供最终的一致性,因此不支持即时多设备访问。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48180256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档