2012-06-13 27 views
11

我正在使用NSUbiquitousKeyValueStore将一些偏好数据同步到iCloud。我发现如果用户在“设置应用”中禁用了iCloud中的“文档&数据”项,NSUbiquitousKeyValueStore无法将其数据同步到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文档存储)。有更好的选择吗?

回答

12

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

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

+0

您的答案似乎与文档有冲突,文档中提到:“避免在离线时使用此类来处理应用行为所必需的数据[...]”。我已经发布了一个[问题](http://stackoverflow.com/q/23662856/251760)。你能回答吗? – Jonathan

+0

这意味着您不应该依赖这家商店来成为您的本地真相,而应该更多地使用您的设备之间的简单同步通信渠道。 – Julien

+0

谢谢!我把你的回答转换成了一个[答案](http://stackoverflow.com/a/26556553/251760)来回答我的问题,我希望你没问题。 (如果你想自己做出答案,我会很乐意删除我的。) – Jonathan

3

我不知道该文档已被更新,但现在苹果说:

要确定的iCloud是可用的,特别是在启动时,检查 的ubiquityIdentityToken属性的值,而不是

对于ubiquityIdentityTokenURLForUbiquityContainerIdentifier都参见NSFileManager

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

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

+1

如果您使用iCloud Documents,那么这是真的,问题是关于iCloud键值存储。 –

+0

嗯。我没有得到什么吗? ubiquityIdentityToken的文档并不建议它特定于iCloud Documents:“当iCloud当前可用时,该属性[即ubiquityIdentityToken]包含一个不透明的对象,表示当前用户的身份。如果iCloud因任何原因或不存在没有登录的用户,这个属性的值是零。“ –

+1

正如朱利安所说,键值存储总是可用的(即使'ubiquityIdentityToken'为零)。我们要检查用户是否禁用了设置> iCloud>文档和数据。 –

相关问题