繁体   English   中英

如何在Cocoa应用程序和iOS应用程序之间测试iCloud同步

[英]How to test iCloud synchronisation between Cocoa app and iOS app

我的问题很简单:

我现在正在开发将数据存储在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. 在这里,我希望可可应用程序会在10-20秒内调用dataUpdatedFromCloud但是不会!!!

我所做的一切是否正确,或者我理解不正确?

好吧,也许吧,但是失败的原因包括:

  • 两个应用程序上的iCloud容器ID并不完全相同。 一方面,这很明显,但另一方面,这是最容易搞砸的事情,因此请再次检查。
  • iCloud容器ID可以,但是配置文件实际上并未在两个应用程序中都启用iCloud。 您应该在两个应用程序中都检查ubiquityIdentityToken以进行验证。
  • 例如,当应用未运行时,该值已经同步。 如果更改是在应用程序运行时发生的, 并且新值与旧值不相同则只会发布您要查找的通知。 由于您始终将@1设置为值,因此很有可能已经接收到该值,并且新尝试不会更改任何内容。 对于测试,将@1替换为@1 @([NSDate timeIntervalSinceReferenceDate])可能有助于确保每次获得的值都不同。
  • iCloud暂时被混淆/崩溃/损坏/只是缓慢。 尽管10到20秒是合理的,但不能保证性能。 如果它在30秒甚至30分钟后显示,则仍按广告宣传工作。

通过重置iCloud的文档和数据,我已经成功地解决了iCloud同步问题,如下所述: http : //support.apple.com/kb/HT5824

有时,iCloud对其已同步的内容以及在何处感到困惑-测试(尤其是当您进行重复的相同更新时)在我的体验中尤其如此。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM