- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 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/
我已经设置了应用程序组并且正在使用 NSUserDefaults initWith suiteName为了允许我的应用程序和我的扩展程序访问同一组首选项。我现在想用一个可以通过 iCloud 同步这些
对于 iOS 应用程序,我正在研究如何通过 iCloud 同步用户数据。由于数据量很小,我目前想到的是使用iCloud的键值存储(NSUbiquitousKeyValueStore)。 我有几个关于
我正在尝试将一些数据从 iCloud 迁移出去,所以我想我只需将 key 保存在新位置后就将其删除,然后如果该值不再存在,我就会知道该值是否不再需要迁移iCloud。 NSUbiquitousKeyV
我在使用 NSUbiquitousKeyValueStore 以及让它在两个设备之间可靠地同步时遇到了麻烦。它开始让我发疯。疯了。 我看到我的代码调用了: [[NSUbiquitousKeyValue
我遇到了一个似乎很独特的问题。我的 NSUbiquitousKeyValueStore 在模拟器中的启动之间根本不起作用。也就是说,我什至不是在谈论 iCloud 同步或类似的东西,我无法让它通过下面
我正在使用 NSUbiquitousKeyValueStore 在 iCloud 中存储用户首选项。为确保我了解 NSUbiquitousKeyValueStore 的工作原理,我成功地存储了一个 S
我正在编写一些代码来保存用户首选项。 enum CustomSettingsEnum: NSNumber { case Off case On } let someKey = "SOM
我正在尝试使用 NSUbiquitousKeyValueStore 类来使用 iCloud 键值。但是当我尝试通过指定的键获取值时,出现错误 [ valueForUndefinedKey:]: thi
背景故事:对于使用 Catalyst 制作的 Mac 应用程序,推送通知目前存在错误。这意味着如果同步引擎是 CloudKit 或 NSUbiquitousKeyValueStore,则不会接收在其他
我正在我的应用程序中启用 iCloud 以保存一些首选项。iCloud 在功能部分启用,我的配置文件已更新: 我保存和检索测试示例的代码如下: NSUbiquitousKeyValueStore *c
我正在使用 NSUbiquitousKeyValueStore 在 iCloud 上存储用户数据字典( gem 、用户名等)。 gem 可以在应用程序中作为消耗性 IAP 购买,然后用户拥有的 gem
NSUbiquitousKeyValueStore 的最大大小是多少? 我见过相互矛盾的报告,例如 current iOS documentation says 1mb : 但是,如果您在 Googl
来自 Apple's NSUbiquitousKeyValueStore documentation : If you write to the key-value store object when
我了解到 NSUbiquitousKeyValueStore 始终可用,在 no iCloud account 时也是如此已成立。这让我相信我可以安全地将基本数据存储在其中,而无需在 NSUserDe
文档并不清楚如何在边缘情况下使用 NSUbiquitousKeyValueStore。 如果我想设置一个值,我知道我应该为 NSUserDefaults 和 NSUbiquitousKeyValueS
我正在使用 NSUbiquitousKeyValueStore 来同步我的应用程序首选项,我正在使用两台设备 iPhone 3GS 和 iPhone 4 测试同步过程。 当我更改一台设备(比如 iPh
我已经尝试了所有方法并阅读了所有主题,但我无法找出为什么 NSUbiquitousKeyValueStore 没有存储在 iCloud 上。 • 创建了特定的 App ID • 为这个 App ID
我有一个配置为使用 iCloud 的应用程序。我正在向 NSUbiquitousKeyValueStore 添加一个键/值,我可以在我的所有设备上按预期检索它。但是,如果我从“设置”下删除我的应用程序
在我的 watchOS 2 应用程序中使用 NSUbiquitousKeyValueStore 时出现此错误: NSUbiquitousKeyValueStore is unavailable
所以我只是想让我的无处不在的关键数据发挥作用。不幸的是我也无法做到!我就是无法让它通过 iCloud 执行任何操作! Here是一个项目文件,其中有一个带有三个按钮的简单 Storyboard。目标是
我是一名优秀的程序员,十分优秀!