gpt4 book ai didi

iphone - iOS - NSUbiquitousKeyValueStore 不同步 "actually"

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:06:52 25 4
gpt4 key购买 nike

我正在使用 NSUbiquitousKeyValueStore 来同步我的应用程序首选项,我正在使用两台设备 iPhone 3GS 和 iPhone 4 测试同步过程。

当我更改一台设备(比如 iPhone 3GS)的首选项时,它使用以下代码将首选项同步到 NSUbiquitousKeyValueStore:

NSUbiquitousKeyValueStore *keyStore = [NSUbiquitousKeyValueStore defaultStore];
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

[keyStore setObject:[userDefaults objectForKey:S_KEY_UI_SOUNDS]
forKey:S_KEY_UI_SOUNDS];

if ([keyStore synchronize]) {
NSLog(@"TO ICLOUD - UI SOUNDS %@", [keyStore objectForKey:S_KEY_UI_SOUNDS]);
}

但是出现了两个问题:

首先:虽然注册了NSUbiquitousKeyValueStoreDidChangeExternallyNotification,但我从未在 iPhone 4 上收到它。因此,如果 iPhone 4 处于事件状态而 iPhone 3GS 更改了首选项,iPhone 4 变得没有意识到这一点。

第二:当 iPhone 开始从 NSUbiquitousKeyValueStore 同步偏好设置时,它永远不会使用 iPhone 3GS(见下面的代码)获得新的偏好设置。尽管与 NSUbiquitousKeyValueStore 成功同步(同步方法返回 YES)。

NSUbiquitousKeyValueStore *keyStore = [NSUbiquitousKeyValueStore defaultStore];
if ([userDefaults synchronize]) {
NSLog(@"FROM - UI SOUNDS %@", [keyStore objectForKey:S_KEY_UI_SOUNDS]);
}

有解决办法吗?或者我做错了什么?

最佳答案

首先 -synchronize 不是关于“与 iCloud 服务器同步”。它是关于同步您的更改和磁盘上的本地存储。一旦它在磁盘上,底层引擎就会在它认为合适的时候(通常在 ~3 秒后)将您的更改推送到云端。

其次,您应该订阅商店变更通知。

简而言之,使用 NSUbiquitousKeyValueStore 时您应该做的第一件事是:

store = [NSUbiquitousKeyValueStore defaultStore];
// subscribe immediately to any change that might happen to the store
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(storeDidChangeExternally:) name:NSUbiquitousKeyValueStoreDidChangeExternallyNotification object:store];

// get any changes since the last app launch right now (safer)
[store synchronize];

最后,与云端的同步发生在“适当的时间”(你现在无法控制)。

只是给你一个想法,一旦你将内存中的更改“同步”到磁盘,引擎通常会“很快”开始与云同步并推送你的更改。

服务器随后会向其他设备推送通知,这些设备随后也会安排与云的同步。

正常情况下,设备同步大约需要 7 秒。

关于iphone - iOS - NSUbiquitousKeyValueStore 不同步 "actually",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11806034/

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