我遇到了问题,即使用户在设置中正确设置了所有内容,URLForUbiquityContainerIdentifier在某些情况下也会返回nil。我的代码:
dispatch_async(someQueue, ^{
if (![[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil]) {
ErrLog(@"iCloud container not available.");
return;
}
dispatch_async(dispatch_get_main_queue(), ^{
[...]
});
});
有人遇到同样的问题吗?我将nil设置为容器标识符,该标识符应该根据Apple文档工作,但我对此不再那么信服。此代码也适用于大多数用户,但不是每个人都适用。
答案 0 :(得分:8)
检查您是否在权利中启用了iCloud容器。启用权利时,默认情况下不会添加容器。点击目标/摘要/权利中的“+”符号以添加您的appId。
答案 1 :(得分:8)
带iOS7的iPad mini。我刚刚经历过URLForUbiquityContainerIdentifier突然开始返回nil。我尝试重启设备,但没有帮助。
在“设置”应用内,在“iCloud”菜单下。我注意到'Documents&数据'设置为关闭。
解决方案是改变'文件&数据'到'开'。
答案 2 :(得分:7)
如果有任何人在使用iOS8 Betas时遇到同样的问题,那么在Xcode 6中生成Entitlements的方式似乎存在一个错误。几天来我一直在反对这个问题,直到Apple Developer发表这篇文章论坛:https://devforums.apple.com/thread/229509?
基本上,Xcode应该生成一个名为com.apple.developer.icloud-container-identifiers
的密钥,它应该是com.apple.developer.ubiquity-container-identifiers
(普遍性,而不是 icloud )。当值iCloud.$(CFBundleIdentifier)
时,它也可能设置为$(TeamIdentifierPrefix).$(CFBundleIdentifier)
。
当然,这可能会在下一个测试版中修复,但对于像我这样困惑的人,我希望这会有所帮助。
答案 3 :(得分:3)
我会在我需要将$(TEAMID)更改为个人资料ID的应用上查看您的entitlement.plist 配置文件中dns之前的数字和字母 - 这是一些可以与UIManagedDocument一起使用的代码
/// test iCloud Access
- (void)initializeiCloudAccess {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
if ([[NSFileManager defaultManager]
URLForUbiquityContainerIdentifier:nil] != nil)
NSLog(@"iCloud is available\n");
else
NSLog(@"This Application requires iCloud, but it is not available.\n");
});
}
- (NSURL *)iCloudURL
{
return [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];
}
- (NSURL *)iCloudDocumentsURL
{
return [[self iCloudURL] URLByAppendingPathComponent:@"Documents"];
}
- (NSURL *)iCloudCoreDataLogFilesURL
{
return [[self iCloudURL] URLByAppendingPathComponent:@"CoreDataLogs"];
}
答案 4 :(得分:2)
URLForUbiquityContainerIdentifier alway return nil
NSURL *ubiquityURL = [fileManager URLForUbiquityContainerIdentifier:nil]; if (ubiquityURL == nil)
ubiquityURL在调试中是正常的,但ubiquityURL在分发到appstore后总是为零。
答案 5 :(得分:1)
今天我又遇到了这个问题。
这次是因为我的配置文件无效。
在开发者网站上,我必须生成新的配置文件。然后在Xcode5中重新加载配置文件。现在URLForUbiquityContainerIdentifier
再次返回有效网址。
答案 6 :(得分:0)
如果您仍有问题,请确保您在设备上运行,因为模拟器不会始终返回有效值。 我试过你的应用程序代码,我没有得到零
答案 7 :(得分:0)
在iPhone的设置中启用“iCloud Drive”