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

时间:2012-06-13 00:15:25

标签: ios detect icloud nsubiquitouskeyvaluestore

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

2 个答案:

答案 0 :(得分:13)

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

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

答案 1 :(得分:4)

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

  

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

ubiquityIdentityTokenURLForUbiquityContainerIdentifierNSFileManager

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

适用于iOS6及更高版本。