NSUbiquitousKeyValueStore用于初始同步的时间太长

时间:2018-01-10 04:20:52

标签: ios icloud

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

似乎并非如此。从我所做的测试开始,键值对需要很长时间才能在首次启动应用时从iCloud下载。之后,数据似乎几乎立即上传和下载。这会导致我的应用出现问题,因为在重新安装时,它不会立即让用户使用以前的数据并创建一组新数据,从而无法使用NSUbiquitousKeyValueStore

有没有办法确保在首次启动应用后尽快提供来自NSUbiquitousKeyValueStore的信息,如果没有,我可以使用哪些其他iCloud API?

1 个答案:

答案 0 :(得分:2)

为确保在首次启动应用后尽快获得来自NSUbiquitousKeyValueStoreDidChangeExternallyNotification的信息。您需要执行两个步骤。

  • 步骤1:-注册 NSUbiquitousKeyValueStore.default.synchronize() 在应用启动期间发出通知。

  • 步骤2:-调用实例方法
    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 } } 推荐 调用此方法的时间是在应用启动时或返回到 前景。

例如:-

NSUbiquitousKeyValueStore

NB:所有类型的iCloud存储,例如Person1, Person2, Person3, Person7, Person8 Person5, Person6, Person9 仅提供最终的一致性,因此不支持即时的多设备访问。