以下是 Apple Docs 中的一句话:“如果未配置 iCloud,请询问用户是否要配置它(如果他们想配置 iCloud,最好将它们转移到启动设置)。”
如何检查 iCloud 是否已配置以及如何启动 iCloud 设置?
编辑:
如果您的目标是 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];
}
});
});
只是为了补充上面的答案,如果您只想知道 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 文档,您可以从主线程调用它。
由于此方法返回速度相对较快,因此您可以在启动时调用它,也可以从应用程序的主线程调用它。