【问题标题】:NSUbiquitousKeyValueStore not syncing with iCloudNSUbiquitousKeyValueStore 未与 iCloud 同步
【发布时间】:2014-12-13 05:13:51
【问题描述】:

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

• 创建了特定的应用 ID

• 为该 App ID 启用 iCloud

• 创建的配置文件

• 在项目上启用 iCloud

• 设置 Key Value 的权利:$(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 设备上运行。

我错过了什么吗?

谢谢!

【问题讨论】:

  • 经过几天的努力,我简单地从 iCloud 注销并再次登录。现在一切正常...... URLForUbiquityContainerIdentifier 仍然返回 nil,所以我无法检查 iCloud 是打开还是关闭,但至少它正在同步并将数据保存在云端。

标签: ios icloud nsubiquitouskeyvaluestore


【解决方案1】:

我遇到了同样的问题,我解决了:

  1. 卸载应用
  2. 重启设备
  3. 安装应用程序

而不是登录和退出 iCloud。

【讨论】:

    【解决方案2】:

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

    然后我意识到,在“+ Capabilities”旁边有“All、Debug、Release”选项卡,如果您在 Debug 或 Release 下添加了该功能,那么它仅适用于该环境。

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

    【讨论】:

      【解决方案3】:

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

      我发现,当应用程序从 Xcode 中删除并重新安装时,如果您尝试过快地从 [NSUbiquitousKeyValueStore defaultStore] 中读取(例如从 didFinishLaunchingWithOptions 中读取),那么您将一无所获。如果您为 NSUbiquitousKeyValueStoreDidChangeExternallyNotification 添加了一个观察者,那么该观察者的调用方式为:

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

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

      这样做的一个好处是观察者也可以回复NSUbiquitousKeyValueStoreChangeReasonKey] intValue] == NSUbiquitousKeyValueStoreServerChange

      并且该设备将在其他设备执行[[NSUbiquitousKeyValueStore defaultStore] synchronize];后不久获得任何其他设备所做的更改

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 2019-05-16
          • 1970-01-01
          • 2012-07-08
          • 2014-12-26
          • 1970-01-01
          • 2014-11-13
          • 2012-01-27
          • 2017-03-25
          • 1970-01-01
          相关资源
          最近更新 更多