【发布时间】:2012-08-02 02:39:41
【问题描述】:
我正在使用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]);
}
有解决办法吗?还是我做错了什么?
【问题讨论】:
-
另外,别忘了您应该在两台设备上都为 iCload 设置 Apple ID 帐户...
标签: iphone objective-c ios synchronization icloud