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

Objective c 如何测试Cocoa应用程序和iOS应用程序之间的iCloud同步,objective-c,macos,cocoa,icloud,nsubiquitouskeyvaluestore,Objective C,Macos,Cocoa,Icloud,Nsubiquitouskeyvaluestore,我的问题很简单: 我现在正在开发Cocoa应用程序,它将数据存储在iCloud(键值存储)中。为了测试iCloud同步,我构建了一个简单的iOS应用程序,并将其安装在我的设备中 我在cocoa应用程序中进行了iCloud初始化: [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dataUpdatedFromCloud:) name:NSUbiquitousKeyValueStoreDidChang

我的问题很简单:

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

我在cocoa应用程序中进行了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"];
我的测试场景是:

  • 在Xcode中运行cocoa应用程序
  • 在我的设备中运行iOS应用程序
  • 在iOS应用程序中,我有一个按钮,它调用脚本1
  • 我希望在Cocoa应用程序上,dataUpdatedFromCloud在10-20秒内被调用,但它没有

  • 我做的每件事都是正确的,还是我理解的有误?

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

    • 两个应用上的iCloud容器ID不完全相同。一方面,这是显而易见的,但另一方面,这是最容易出错的事情,所以请再次检查
    • iCloud容器ID正常,但资源调配配置文件实际上并未在这两个应用程序中启用iCloud。您应该在两个应用程序中检查
      ubiquityIdentityToken
      ,以验证这一点
    • 例如,当应用程序未运行时,该值已同步。只有当应用程序运行时发生更改时,才会发布您正在查找的通知,如果新值与旧值不同,则会发布通知。由于您总是将
      @1
      设置为值,因此完全有可能该值已被接收,并且新的尝试不会改变任何内容。对于测试而言,将
      @1
      替换为
      @([NSDate timeintervalncereferencedate])
      可能会有所帮助,以确保每次都获得不同的值
    • iCloud暂时混乱/停机/崩溃/只是速度太慢。虽然10-20秒是合理的,但没有性能保证。如果它在30秒甚至30分钟后出现,它仍然像广告中所说的那样工作

    我成功地通过重置iCloud的文档和数据实现了iCloud同步,如下所述:

    有时候,iCloud会对它已经同步的内容感到困惑,在我的经验中,测试(尤其是当您重复进行相同的更新时)使这种情况更可能发生