iOS网络编程-iCloud文档存储编程实例

iCloud文档存储编程相对键值数据存储而言比较复杂,涉及到自定义文档类、获得iCloud文档目录、查找Ubiquity容器中的文档、保存文档和解决文档冲突等内容。

实例:iCloud文档存储编程设计

实例介绍一下iCloud文档存储编程过程,画面中有一个文本框和一个按钮控件,在设备1输入内容,点击“保存数据”按钮,将数据保存iCloud服务器。右图是设备2画面,过几秒钟后设备2上会读取iCloud服务器端数据,并显示在文本框中。

14

配置Xcode工程

编写iCloud文档存储编应用程序也需要在Xcode工程中进行一些配置,选择TAGETS→MyNotes→Summary→Entitlements

15

在图中Ubiquity Contrainers添加com.51work6.MyNotes,这是Ubiquity容器标识,可以有多个Ubiquity容器标识,这个容器标识代表着不同的目录。com.51work6.MyNotes代表目录如下所示:

/var/mobile/Library/Mobile Documents/98Z3R5XU29~com~51work6~MyNotes/

其中的98Z3R5XU29是在iOS开发者配置门户网站创建App ID时候生成的,它被称为Team ID

如果应用中没有使用iCloud键值数据存储key-Value Store可以不用配置。

自定义文档类

我们需要自己封装一个文档类,它继承抽象类UIDocument,而UIDocument实现NSFilePresenter协议。实现NSFilePresenter协议的类,它所代表的文件和目录可以被查看和编辑,这些NSFilePresenter实现类与文件协调者类NSFileCoordinator结合使用,可以协调管理文件或目录。

这个类我们命名为MyCloudDocument, MyCloudDocument的代码如下:

[cpp]  view plain copy
  1. #import <UIKit/UIKit.h>  
  2.   
  3.    
  4.   
  5. @interface MyCloudDocument : UIDocument ①  
  6.   
  7. @property (strong, nonatomic) NSString *contents;  
  8.   
  9. @end  
  10.   
  11.    
  12.   
  13. #import ”MyCloudDocument.h”  
  14.   
  15. @implementation MyCloudDocument  
  16.   
  17.    
  18.   
  19. //加载数据  
  20.   
  21. - (BOOL)loadFromContents:(id)contents ofType:(NSString *)typeName error:(NSError **)outError ②  
  22.   
  23. {  
  24.   
  25. if ([contents length] > 0)  
  26.   
  27. {  
  28.   
  29. self.contents = [[NSString alloc] initWithData:contents encoding:NSUTF8StringEncoding]; ③  
  30.   
  31. }  
  32.   
  33. return YES;  
  34.   
  35. }  
  36.   
  37. //保存数据  
  38.   
  39. - (id)contentsForType:(NSString *)typeName error:(NSError **)outError ④  
  40.   
  41. {  
  42.   
  43. return [self.contents dataUsingEncoding:NSUTF8StringEncoding];  ⑤  
  44.   
  45. }  
  46.   
  47. @end  


获得iCloud文档目录

iCloud文档目录是指在Ubiquity容器下的Document目录,因此获得了Ubiquity容器的根目录,就可以获得的iCloud文档目录了。

ViewController.m中的 ubiquitousDocumentsURL方法可以iCloud文档目录:

[cpp]  view plain copy
  1. //请求本地Ubiquity容器,从容器中获得Document目录URL  
  2.   
  3. - (NSURL *)ubiquitousDocumentsURL {  
  4.   
  5. NSFileManager* fileManager = [NSFileManager defaultManager]; ①  
  6.   
  7. NSURL* containerURL = [fileManager  
  8.   
  9. URLForUbiquityContainerIdentifier:@"98Z3R5XU29.com.51work6.MyNotes"]; ②  
  10.   
  11. containerURL = [containerURL URLByAppendingPathComponent:@"Documents"]; ③  
  12.   
  13. return containerURL;  
  14.   
  15. }  


查找Ubiquity容器中的文档

获得iCloud文档目录后,我们需要找到容器中的文件。查询容器中的文件需要注册两个广播通知:

NSMetadataQueryDidFinishGatheringNotification  查询结束发出通知;

NSMetadataQueryDidUpdateNotification  查询结束,进入开始更新阶段发出的通知;

ViewController.m中注册和解除通知代码如下:

[cpp]  view plain copy
  1. - (void)viewDidLoad  
  2.   
  3. {  
  4.   
  5. [super viewDidLoad];  
  6.   
  7. //为查询iCloud文件的变化,注册通知  
  8.   
  9. [[NSNotificationCenter defaultCenter] addObserver:self  
  10.   
  11. selector:@selector(updateUbiquitousDocuments:)  
  12.   
  13. name:NSMetadataQueryDidFinishGatheringNotification object:nil];  
  14.   
  15. [[NSNotificationCenter defaultCenter] addObserver:self  
  16.   
  17. selector:@selector(updateUbiquitousDocuments:)  
  18.   
  19. name:NSMetadataQueryDidUpdateNotification object:nil];  
  20.   
  21.    
  22.   
  23. //查询iCloud文件的变化  
  24.   
  25. [self searchFilesOniCloud];  
  26.   
  27.    
  28.   
  29. }  
  30.   
  31. - (void)didReceiveMemoryWarning  
  32.   
  33. {  
  34.   
  35. [super didReceiveMemoryWarning];  
  36.   
  37. [[NSNotificationCenter defaultCenter] removeObserver:self];  
  38.   
  39. }  


 

保存文档 

保存文档很简单,它是在ViewController.m中的 saveClick:方法处理的,saveClick:方法是点击按钮时候触发:

[cpp]  view plain copy
  1. - (IBAction)saveClick:(id)sender {  
  2.   
  3. _myCloudDocument.contents = _txtContent.text;  
  4.   
  5. [_myCloudDocument updateChangeCount:UIDocumentChangeDone];  
  6.   
  7. [_txtContent resignFirstResponder];  
  8.   
  9. }  


保存成功之后我们可以在其它设备上看看是否iCloud中已经有abc.txt文档了。如果使用Mac OS X系统电脑,我们可以在“系统偏好设置”中打开iCloud对话框,点击“管理”按钮可以打开iCloud空间管理对话框,其中的MyNotes是我应用名,右边的abc.txt创建的文件。

16

如果在iPhone、iPod touch和iPad等iOS设备中查看,可以启动设置应用程序,也进入到存储空间管理中,我的iPod touch中查看的情况。

17

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值