2012-08-04 75 views
2

我使用NSUbiquitousKeyValueStore同步我的應用程序的喜好,以及我在一臺設備中進行更改我測試使用兩個設備iPhone 3GS和iPhone 4iOS版 - NSUbiquitousKeyValueStore不「實際上是」同步

同步過程(說的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]); 
} 

是否有解決方案?或者我做錯了什麼?

+0

另外,不要忘記你應該有兩個設備上的iCload設置你的Apple ID帳戶... – 2012-09-24 11:08:11

回答

3

第一個-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秒的時間。

+0

首先,我會測試,並考慮一整分鐘的同步。第二,我已經這樣做了,而且我在被調用的方法中沒有收到任何東西(在你的代碼中,這是storeDidChangeExternally :)。這可能是由於第一個問題。 – 2012-08-04 05:24:19

+0

檢查您的iCloud帳戶,檢查文檔和數據開關已打開,並且您已通過Wifi(或蜂窩網絡**和**文檔和數據允許通過蜂窩網絡進行同步) – Julien 2012-08-04 05:27:50

+1

此外,iOS 5不提供良好的方式您可以查看實際發生的iCloud同步情況。你應該提交一個關於這個的錯誤。 – Julien 2012-08-04 05:29:01

相關問題