如何仅使用NSUbiquitousKeyValueStore以编程方式检测用户设备上是否启用了iCloud?

我正在使用NSUbiquitousKeyValueStore将一些首选项数据同步到iCloud。 我发现如果用户在“设置应用程序”中禁用iCloud的“文档和数据”项,则NSUbiquitousKeyValueStore无法将其数据同步到iCloud。 所以,我想首先检查此设置是否已打开。 我找到了这段代码片段:

  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文档存储)。 还有更好的选择吗?

基本上, NSUbiquitousKeyValueStore始终可用,即使用户没有iCloud帐户(在这种情况下, NSUbiquitousKeyValueStore只是一个简单的本地存储)。 因此,一般情况下,如果配置了iCloud帐户,则无需询问自己或用户。

如果你真的想知道,在iOS 5中,唯一的解决方案是你提到的那个。

我不知道文档是否已更新,但Apple现在说:

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

有关ubiquityIdentityTokenURLForUbiquityContainerIdentifier请参阅URLForUbiquityContainerIdentifier

另请注意,Apple表示URLForUbiquityContainerIdentifier可能相对较慢,并且检查ubiquityIdentityToken的速度相对较快。

这适用于iOS6及更高版本。