NSUbiquitousKeyValueStore不与iCloud同步

时间:2014-10-17 15:11:28

标签: ios icloud nsubiquitouskeyvaluestore

我已经尝试了所有内容并阅读了所有主题,但我无法找到为什么NSUbiquitousKeyValueStore没有存储在iCloud上。

•创建了特定的应用ID

•启用iCloud至此App ID

•创建供应配置文件

•在项目上启用iCloud

•将权利设置为键值:$(TeamIdentifierPrefix)$(CFBundleIdentifier)

•打开设备上的iCloud Drive

但NSUbiquitousKeyValueStore仅在本地保存。当我重新安装应用程序时,它无法从iCloud获取信息。

这就是我尝试的方式:

    NSUbiquitousKeyValueStore *cloudStore = [NSUbiquitousKeyValueStore defaultStore];

if ([[cloudStore stringForKey:@"testString"] length] == 0) {
    NSLog(@"Nothing in iCloud - setting a value...");
    [cloudStore setString:@"I'm live in iCloud!" forKey:@"testString"];
    [cloudStore synchronize];
    [[NSUbiquitousKeyValueStore defaultStore] synchronize];

} else {
    NSString *result = [cloudStore stringForKey:@"testString"];
    NSLog(@"Found something in iCloud - here it is: %@", result);
}

[self registerForiCloudNotificatons];

如果我删除该应用或试用新设备,它在iCloud上找不到任何内容。

所以我试着找出iCloud是否有效:

    NSURL *ubiq = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];
if (ubiq) {
    NSLog(@"iCloud at %@", ubiq);

} else {
    NSLog(@"No iCloud access, %@", ubiq);
}

这总是回归"没有iCloud访问"我无法弄清楚原因。无论我做什么,URLForUbiquityContainerIdentifier总是返回nil。

我在启用了iCloud的iOS 8设备上运行。

我错过了什么吗?

谢谢!

4 个答案:

答案 0 :(得分:3)

我遇到了同样的问题。在设备上注销并重新登录我的iCloud帐户也为我解决了这个问题。

如果您在启用iCloud权利之前 设备上安装了具有相同捆绑包标识符的应用,则似乎会出现此问题。我在2个测试设备上遇到了这个问题。第一个在启用iCloud的情况下第一次安装应用程序的设备没有问题。

答案 1 :(得分:0)

我遇到了同样的问题,这要归功于这个答案,但是我所做的只是卸载应用程序->重新启动设备->安装应用程序,而不是登录和退出iCloud。

答案 2 :(得分:0)

您似乎在下载数据后添加了观察者。那可能是错误的。

我发现,如果从Xcode删除该应用并重新安装该应用,那么,如果您尝试从[NSUbiquitousKeyValueStore defaultStore]中读取内容的速度过快(例如,从didFinishLaunchingWithOptions:中读取),则您什么也收不到。如果您为NSUbiquitousKeyValueStoreDidChangeExternallyNotification添加了观察者,则该观察者的调用方式为:

[[[notification userInfo] objectForKey: NSUbiquitousKeyValueStoreChangeReasonKey] intValue] == NSUbiquitousKeyValueStoreInitialSyncChange

从那里您可以从[NSUbiquitousKeyValueStore defaultStore]中成功读取。

这样做的一个优点是观察者也可以对NSUbiquitousKeyValueStoreChangeReasonKey] intValue] == NSUbiquitousKeyValueStoreServerChange做出回应

,该设备将在其他设备执行[[NSUbiquitousKeyValueStore defaultStore] synchronize];

之后不久获得其他任何设备所做的更改

答案 3 :(得分:0)

只花了几个小时尝试一切(重新启动、清理构建、卸载、撤销、重新创建权利,......)。

然后我意识到,在“+ 功能”旁边有“全部、调试、发布”选项卡,如果您在“调试”或“发布”下添加了该功能,那么它仅适用于该环境。

Screenshot of capabilities environment

您必须在“全部”选项卡下创建功能。如果您之前在 Debug 或 Release 下创建了它,请确保在重新添加之前先删除该功能。