尝试修复iCloud的一些问题。这是我的代码的两个版本。
- (void)viewDidLoad{
[super viewDidLoad];
[self checkICloudData];
}
版本1
- (void)checkICloudData
{
NSFileManager * fileManager=[NSFileManager defaultManager];
NSURL *iCloudURL=[fileManager URLForUbiquityContainerIdentifier:nil];
NSLog(@"iCloud URL is %@",[iCloudURL absoluteString]);
if (iCloudURL){
NSUbiquitousKeyValueStore * store=[NSUbiquitousKeyValueStore defaultStore];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(updateICloudData:)
name:NSUbiquitousKeyValueStoreDidChangeExternallyNotification
object:store];
[store synchronize];
}else{
NSLog(@"iCloud is not supported or enabled");
[self loadDataFromBundle];
}
}
iCloudURL总是返回nil。其他方法不会调用。
第2版
- (void)checkICloudData
{
NSUbiquitousKeyValueStore * store=[NSUbiquitousKeyValueStore defaultStore];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(updateICloudData:)
name:NSUbiquitousKeyValueStoreDidChangeExternallyNotification
object:store];
[store synchronize];
}
- (void)updateICloudData:(NSNotification*)notification
{
NSDictionary *userInfo = [notification userInfo];
NSNumber *changeReason = [userInfo objectForKey:NSUbiquitousKeyValueStoreChangeReasonKey];
NSInteger reason = -1;
if (!changeReason) {
return;
} else {
reason = [changeReason integerValue];
}
if ((reason == NSUbiquitousKeyValueStoreServerChange) || (reason == NSUbiquitousKeyValueStoreInitialSyncChange)) {
NSArray *changedKeys = [userInfo objectForKey:NSUbiquitousKeyValueStoreChangedKeysKey];
for (NSString *key in changedKeys) {
if ([key isEqualToString:casesKey]) {
[self iCloudNotification];
}else {
[self loadDataFromBundle];
}
}
}
}
使用该版本,iCloud同步可以与iPad配合使用,但不能与iPhone配合使用。在iPhone的iCloud Drive设置中,我看到我的应用程序与iPad中的相同
我的iCloud设置:
会员中心 - 启用iCloud。兼容性 - 包括CloudKit支持
目标功能 - 仅检查服务键值存储
默认情况下创建的权利字典包含密钥com.apple.developer.icloud-container-identifiers,其中包含一个空数组和密钥com.apple.developer.ubiquity -kvstore-identifier,其正确的字符串值为my appID < / p>
那么,为什么iCloudURL总是返回nil?为什么第二个版本适用于iPad,但我的iPhone没有看到NSUbiquitousKeyValueStoreDidChangeExternallyNotification?
答案 0 :(得分:0)
嗯,升级iOS后问题出在我的iPhone上。
当我从iPhone的设置中删除iCloud配置文件并再次添加时,iPhone开始与iCloud同步。
目前,该代码的第二个版本适用于这两种设备。
希望有人帮助解决这类问题。