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

Jag*_*gie 13 detect ios 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;

    }
Run Code Online (Sandbox Code Playgroud)

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

Jul*_*ien 13

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

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


Chr*_*nce 5

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

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

的NSFileManager两个ubiquityIdentityTokenURLForUbiquityContainerIdentifier

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

这适用于 iOS6 及更高版本。

  • 如果您使用 iCloud 文档,问题就是关于 iCloud 键值存储。 (2认同)