如何在只使用NSUbiquitousKeyValueStore时编程检测用户设备上是否启用了iCloud?

我正在使用NSUbiquitousKeyValueStore将一些偏好数据同步到iCloud。 我发现如果用户在“设置应用程序”中禁用了iCloud的“文档&数据”项, NSUbiquitousKeyValueStore就无法将其数据同步到iCloud。 所以,我想先检查一下,如果这个设置是打开的。search结果后,我发现这个代码片段:

  NSURL *ubiq = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil]; NSLog(@"url=%@",ubiq); if (!ubiq) { UIAlertView *av = [[UIAlertView alloc] initWithTitle:nil message:@"Please enable iCloud in Setting app" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; [av show]; return; } 

我想知道的是,这是否是检测的唯一方法,即使我只是使用NSUbiquitousKeyValueStore (而不是iCloud文档存储)。 有更好的select吗?

基本上, NSUbiquitousKeyValueStore始终可用,即使用户没有iCloud帐户(在这种情况下, NSUbiquitousKeyValueStore只是一个简单的本地存储)。 所以一般来说,如果有一个configuration好的iCloud帐户,您不需要问自己或用户。

如果你确实想知道,在iOS 5中,唯一的解决scheme就是你提到的那个。

我不知道文件是否已经更新,但苹果现在说:

要确定iCloud是否可用,尤其是在启动时,请检查ubiquityIdentityToken属性的值

对于ubiquityIdentityTokenURLForUbiquityContainerIdentifier请参阅URLForUbiquityContainerIdentifier

还要注意的是,苹果在说URLForUbiquityContainerIdentifier可能比较慢,而且检查ubiquityIdentityToken是比较快的。

这是针对iOS6及更高版本的。