如何仅使用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属性的值
有关ubiquityIdentityToken
和URLForUbiquityContainerIdentifier
请参阅URLForUbiquityContainerIdentifier
。
另请注意,Apple表示URLForUbiquityContainerIdentifier
可能相对较慢,并且检查ubiquityIdentityToken
的速度相对较快。
这适用于iOS6及更高版本。