我的应用程序使用的iCloud(键值存储)同步多个设备之间的唯一的ID。 该作品接受的点是它真的有工作,在首批推出的应用程式。 它看起来像设备尚不熟悉从iCloud中首先推出的值,应用程序安装,并已运行一段时间之后。
我检查了在应用程序的主视图中viewDidLoad中功能的iCloud值。
所以,我的问题:
- 这是预期的行为?
- 如果是的话,是有另一种解决方案?
- 难道是从Xcode中运行时,不出货的版本,这只是一个问题的情况下? 如果是这样,如何测试?
谢谢!
碧玉
我的应用程序使用的iCloud(键值存储)同步多个设备之间的唯一的ID。 该作品接受的点是它真的有工作,在首批推出的应用程式。 它看起来像设备尚不熟悉从iCloud中首先推出的值,应用程序安装,并已运行一段时间之后。
我检查了在应用程序的主视图中viewDidLoad中功能的iCloud值。
所以,我的问题:
谢谢!
碧玉
当你第一次运行的iCloud功能的应用程式它必须从苹果服务器把所有的数据。 它需要这样做的时间取决于很多事情喜欢什么样的网络您目前所(EDGE,3G,GPRS,WLAN)。 这也取决于iCloud的服务器目前有多少流量必须处理这样的请求到iCloud的服务器可能需要几秒钟,不管你是什么类型的网络连接。
概括起来:是的,这听起来完全正常。
如果您运行的应用程序依赖于这些设置考虑实施一个“等待”或“装载”的观点,只要它需要的应用程序来执行初始同步,并从云中加载所有需要的数据在屏幕上停留。 为了不阻塞UI永远也实现该视图超时(如果不是X秒内装载的iCloud数据,关闭该视图并通知用户)。
我曾在NSUbiquitousKeyValueStoreDidChangeExternallyNotification不触发第一个发射后安装,不管多久,我等了类似的问题。 设置在NSUBiquitousKeyValueStore初始密钥似乎解决这个问题。
加上观察员默认存储后,我立即拨打:
[[NSUbiquitousKeyValueStore defaultStore] setString:@"testValue" forKey:@"testKey"];
[[NSUbiquitousKeyValueStore defaultStore] synchronize];
我用实际数据我要同步不同的密钥(即不密押 )。
你有没有保证NSUbiquitousKeyValueStore
就已经完成了它的第一个同步为您的应用程序启动的第一次。 (事实上,在iOS 5中,它通常作为开始您启动您的应用程序首次同步)。
有没有办法知道,如果第一初始同步已经发生,正在进行或已经完成。 您可以(其实应该 )订阅NSUbiquitousKeyValueStoreDidChangeExternallyNotification
。 诀窍是,如果你的小店是的iCloud服务器上的空,你会不会在初始同步之后得到任何通知(因为你当地的商店是空的,云存储为空为好,真的没什么初始后改变“外部”同步…)
通常情况下,你不应该依赖于初始同步正在进行。
是在发射乐观主义者,即使你的商店是空的,把你的价值观(例如,您的唯一ID)的时候了。 如果初始同步发生的同时或之后,且已存在服务器上的一些价值,当地的价值将被重置为服务器值,你会得到NSUbiquitousKeyValueStoreDidChangeExternallyNotification
与通知NSUbiquitousKeyValueStoreInitialSyncChange
原因。
最后,如果你真的想知道关于初始同步正在完成与否,请提交到bugreport.apple.com的错误,并解释为什么你真的很需要那。