0

我的问题很简单:

我现在正在开发将数据存储在iCloud(键值存储)中的Cocoa 应用程序。为了测试iCloud 同步,我构建了一个简单的iOS 应用程序,并将其安装在我的设备中。

我在可可应用程序中进行了iCloud 初始化:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dataUpdatedFromCloud:) name:NSUbiquitousKeyValueStoreDidChangeExternallyNotification object:[NSUbiquitousKeyValueStore defaultStore]];
[[NSUbiquitousKeyValueStore defaultStore] synchronize];

和选择器:

+(void)dataUpdatedFromCloud:(NSNotification *)notification {
    NSLog(@"dataUpdatedFromCloud: %@", [[NSUbiquitousKeyValueStore defaultStore] objectForKey:@"theKey"]);
}

以便在数据来自 iCloud 时捕获数据。

我在 iOS 应用程序中做的所有事情都是一样的,当我在NSUbiquitousKeyValueStore中存储数据时会采取额外的行动:

// Script 1
[[NSUbiquitousKeyValueStore defaultStore] setDictionary:@{@"id":@1} forKey:@"theKey"];

我的测试场景是:

  1. 在 Xcode 中运行可可应用程序
  2. 在我的设备中运行 iOS 应用程序
  3. 在 iOS 应用程序中,我有一个按钮,它调用脚本 1
  4. 在这里,我希望在 Cocoa 应用程序上会在 10-20 秒内调用dataUpdatedFromCloud ,但事实并非如此!!!

我做的一切都是正确的,还是我理解错误?

4

2 回答 2

2

好吧,可能,但它可能失败的原因包括:

  • 两个应用程序上的 iCloud 容器 ID 并不完全相同。一方面这是显而易见的,但另一方面这是最容易搞砸的事情,所以再检查一次。
  • iCloud 容器 ID 没问题,但配置文件实际上并未在两个应用程序中启用 iCloud。您应该检查ubiquityIdentityToken这两个应用程序以验证这一点。
  • 例如,当应用程序未运行时,该值已同步。只有在应用程序运行时发生更改并且新值与旧值不同时,才会发布您要查找的通知。由于您始终设置@1为值,因此完全有可能已经收到该值并且新的尝试没有改变任何东西。对于测试,它可能有助于替换为确保每次都获得不同的值之@1类的东西。@([NSDate timeIntervalSinceReferenceDate])
  • iCloud 暂时混乱/关闭/损坏/只是很慢。虽然 10-20 秒是合理的,但没有性能保证。如果它在 30 秒甚至 30 分钟后出现,它仍然像宣传的那样工作。
于 2014-05-27T16:21:38.433 回答
0

通过重置 iCloud 的文档和数据,我在 iCloud 同步方面取得了一些成功,如下所述:http: //support.apple.com/kb/HT5824

有时 iCloud 会对它已经同步的内容和位置感到困惑——测试,特别是当您进行重复的相同更新时,根据我的经验,这种情况更有可能发生。

于 2014-05-28T02:45:32.517 回答