15

以下是 Apple Docs 中的一句话:“如果未配置 iCloud,请询问用户是否要配置它(如果他们想配置 iCloud,最好将它们转移到启动设置)。”

如何检查 iCloud 是否已配置以及如何启动 iCloud 设置?

4

2 回答 2

28

编辑:
如果您的目标是 iOS6 或更高版本,您可以使用[[NSFileManager defaultManager] ubiquityIdentityToken];. 有关用法示例,请参阅 @Dj S 的回答:)。
它比针对 iOS5 及更高版本的人的原始解决方案更快、更容易

原始答案
iOS App 编程指南 - iCloud Storage中所述。这可以通过向文件管理器询问无处不在的容器 URL 来检查:)

只要您在下面的方法中提供一个有效的普遍存在的容器标识符,就应该返回 YES

- (BOOL) isICloudAvailable
{
    // Make sure a correct Ubiquity Container Identifier is passed
    NSURL *ubiquityURL = [[NSFileManager defaultManager] 
        URLForUbiquityContainerIdentifier:@"ABCDEFGHI0.com.acme.MyApp"];
    return ubiquityURL ? YES : NO;
}

但是,我发现URLForUbiquityContainerIdentifier:第一次在会话中可能需要几秒钟(我在 iOS5 中使用它,所以现在情况可能有所不同)。我记得使用过这样的东西:

dispatch_queue_t backgroundQueue = 
   dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(backgroundQueue,^{
   BOOL isAvailable = [self isICloudAvailable]
  /* change to the main queue if you want to do something with the UI. For example: */
   dispatch_async(dispatch_get_main_queue(),^{
       if (!isAvailable){
         /* inform the user */
         UIAlertView *alert = [[UIAlertView alloc] init...]
         [alert show];
         [alert release];
       }
   });
});
于 2011-10-19T10:50:16.203 回答
17

只是为了补充上面的答案,如果您只想知道 iCloud 是否可用于您的应用程序,例如
1. 未设置 iCloud 帐户,或
2. 禁用文档和数据(适用于所有应用程序),或
3. 文档和数据仅为您的应用禁用

那么你可以NSFileManager's ubiquityIdentityToken用于iOS 6 及更高版本
如果值为 nil,则未配置 iCloud 帐户。否则,将配置 iCloud 帐户。

id token = [[NSFileManager defaultManager] ubiquityIdentityToken];
if (token == nil)
{
    // iCloud is not available for this app
}
else
{
    // iCloud is available
}

请注意,根据Apple 文档,您可以从主线程调用它。

由于此方法返回速度相对较快,因此您可以在启动时调用它,也可以从应用程序的主线程调用它。

于 2014-05-09T05:52:34.693 回答