下午抽了点时间,测试了下iCloud的Key/Value Store,主要用到NSUbiquitousKeyValueStore:
获取实例对象:
NSUbiquitousKeyValueStore * store = [NSUbiquitousKeyValueStore defaultStore];
保存数据:
[store setString:@”string to save” forKey:@”keyword”];
获取数据:
[store stringForKey:@”keyword”];
还有个隐含的方法会被系统自动调用,不过假如需要(App启动或退出时)马上跟云端同步数据的话,可以:
[store synchronize];
就是这几个简单的令人发指的API,就实现了iCloud Key/Value Storage的基本功能,基本原理是这样子:
1,存储的内容会先被保存到本地(in-memory)。
2,iOS会自动的、周期性的,将本地数据保存到云端。
3,通过侦听store,App可以在云端数据被修改时得到通知来更新数据。
一开始写测试代码时,从iOS开发者网站上下了《Adopting iCloud Storage – Part 1》,准备跟着视频学习使用iCloud API,结果效率低得惊人,配置“Entitlement”时,更因为视频语焉不详,测试失败,最后还是从这个官方教程找到详细的配置方式。
解决了配置“Entitlement”的问题后,调整了下测试步骤:
1,App启动时,调用[store synchronize]向云服务器获取数据,并将数据显示在界面。
2,在数据显示界面修改数据,并调用[store setString: forKey:]保存数据。
3,删除App后重新安装,回到步骤1,看能否看到刚才保存的数据。
测试结果:
1,App重新启动时,[store stringForKey:]什么也获取不到。
2,调用[store synchronize]后,过一段时间(尚不知如何度量,网络情况良好大约三秒内),即可获取到已经保存过的内容。
在这简单的接口里面,不知隐含了多少后台工作,Apple为开发者考虑的实在周到。整个测试花了150分钟左右,其中30分钟修改“Entitlement”配置,30分钟解决一个非常低级的问题——测试界面中,放了个“sync”按钮,用来主动发起跟云端的数据同步,但却忘了在IB中将消息处理函数和触摸消息连接起来,好在有高人指出了这个错误:)