我想使用NSUbiquitousKeyValueStore
在iCloud
中为我正在制作的游戏存储一些简单的键值对。我的印象是,如果用户删除然后重新安装游戏,他们的进度将在应用启动时恢复。
似乎并非如此。从我所做的测试开始,键值对需要很长时间才能在首次启动应用时从iCloud
下载。之后,数据似乎几乎立即上传和下载。这会导致我的应用出现问题,因为在重新安装时,它不会立即让用户使用以前的数据并创建一组新数据,从而无法使用NSUbiquitousKeyValueStore
。
有没有办法确保在首次启动应用后尽快提供来自NSUbiquitousKeyValueStore
的信息,如果没有,我可以使用哪些其他iCloud
API?
答案 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
仅提供最终的一致性,因此不支持即时的多设备访问。