添加觀察員NSUbiquitousKeyValueStoreDidChangeExternallyNotification
和同步NSUbiquitousKeyValueStore
。等待回調立即被調用。
if([[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil])
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyValueStoreChanged:)
name:NSUbiquitousKeyValueStoreDidChangeExternallyNotification
object:[NSUbiquitousKeyValueStore defaultStore]];
[[NSUbiquitousKeyValueStore defaultStore] synchronize];
}
else
{
NSLog(@"iCloud is not enabled");
}
然後使用NSUbiquitousKeyValueStoreChangeReasonKey
的第一時間同步和服務器變化同步之間進行區分。
-(void)keyValueStoreChanged:(NSNotification*)notification
{
NSLog(@"keyValueStoreChanged");
NSNumber *reason = [[notification userInfo] objectForKey:NSUbiquitousKeyValueStoreChangeReasonKey];
if (reason)
{
NSInteger reasonValue = [reason integerValue];
NSLog(@"keyValueStoreChanged with reason %d", reasonValue);
if (reasonValue == NSUbiquitousKeyValueStoreInitialSyncChange)
{
NSLog(@"Initial sync");
}
else if (reasonValue == NSUbiquitousKeyValueStoreServerChange)
{
NSLog(@"Server change sync");
}
else
{
NSLog(@"Another reason");
}
}
}
好奇...是什麼原因在NSFileManager上使用-URLForUbiquityContainerIdentifier方法? – 2012-08-16 20:55:10
檢查iCloud是否在設備上啓用。 – erkanyildiz 2012-08-16 20:55:53
注意:由於所有其他原因,始終有一個回退。這非常重要。您可以考慮所有其他未處理的原因,就像執行正常的服務器更改一樣。 – Julien 2012-08-16 20:58:49