8

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

• 创建了特定的应用 ID

• 为该 App ID 启用 iCloud

• 创建的配置文件

• 在项目上启用 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

4 回答 4

7

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

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

于 2015-03-13T18:37:38.427 回答
4

我遇到了同样的问题,我通过以下方式解决了它:

  1. 卸载应用
  2. 重启设备
  3. 安装软件

而不是登录和退出 iCloud。

于 2019-04-09T17:56:14.857 回答
1

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

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

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

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

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

并且该设备将在该其他设备执行后不久由任何其他设备进行更改[[NSUbiquitousKeyValueStore defaultStore] synchronize];

于 2020-07-27T23:38:39.343 回答
1

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

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

能力环境截图

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

于 2021-04-19T11:11:10.523 回答