首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >iCloud键值同步iOS8 Xcode 6

iCloud键值同步iOS8 Xcode 6
EN

Stack Overflow用户
提问于 2014-10-18 12:49:47
回答 1查看 873关注 0票数 2

试图修复iCloud的一些问题。以下是我代码的两个版本。

代码语言:javascript
运行
复制
- (void)viewDidLoad{

    [super viewDidLoad];

    [self checkICloudData];
}

第1版

代码语言:javascript
运行
复制
- (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总是返回零。其他方法不调用。

第2版

代码语言:javascript
运行
复制
- (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驱动器设置中,我看到我的应用程序与iPad中的相同

我的iCloud设置:

  1. 成员中心- iCloud已启用。兼容性-包括CloudKit支持
  2. 目标功能-服务只检查键值存储
  3. 默认情况下创建的应享权利字典包含带空数组的键com.apple.developer.icloud-container-identifiers和带有正确的appID字符串值的键com.apple.developer.ubiquity-kvstore-identifier。

那么,为什么iCloudURL总是返回零呢?以及为什么第二个版本在iPad中正确工作,但是我的iPhone没有看到

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-20 07:31:56

嗯,问题在我的iPhone升级后的iOS。

当我从iPhone的设置中删除iCloud配置文件并再次添加它时,iPhone就开始与iCloud同步。

现在,第二个版本的代码适用于这两种设备。

希望它能帮助别人解决那种问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26439901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档