iOS网络编程-解决iCloud文档存储过程中文档冲突问题

iCloud文档在保存的过程中难免会发生冲突,我们必须要有一套解决冲突的策略。策略的采用要根据用户的需求而定,有的简单有的复杂,最简单的是直接使用当前版本覆盖冲突版本。复杂的策略,例如:如果是两个文本文件冲突,可以将两个冲突点列出来,让用户来判断再进行保存。

我们采用的策略是使用当前版本覆盖以前的版本。解决冲突首先需要在updateUbiquitousDocuments:方法中注册UIDocumentStateChangedNotification通知:

[cpp]  view plain copy
  1. //当iCloud中的文件变化时候调用  
  2.   
  3. - (void)updateUbiquitousDocuments:(NSNotification *)notification {  
  4.   
  5. … …  
  6.   
  7. if (_myCloudDocument) {  
  8.   
  9. //注册CloudDocument对象到文档协调者,文档状态变化才能收到通知  
  10.   
  11. [NSFileCoordinator addFilePresenter:_myCloudDocument];       ①  
  12.   
  13. //注册文档状态变化通知  
  14.   
  15. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(resolveConflict:)  
  16.   
  17. name:UIDocumentStateChangedNotification object:nil];        ②  
  18.   
  19. }  
  20.   
  21. }  
  22.   
  23. //文档冲突解决  
  24.   
  25. - (void)resolveConflict:(NSNotification *)notification {  
  26.   
  27. if (_myCloudDocument  
  28.   
  29. && _myCloudDocument.documentState == UIDocumentStateInConflict) { ③  
  30.   
  31. NSLog(@”冲突发生”);  
  32.   
  33. //文档冲突解决策略  
  34.   
  35. NSError *error;  
  36.   
  37. if (![NSFileVersion removeOtherVersionsOfItemAtURL: _  
  38.   
  39. myCloudDocument.fileURL error:&error]) { ④  
  40.   
  41. NSLog(@”移除其它的文档: %@”, [error localizedFailureReason]);  
  42.   
  43. return;  
  44.   
  45. }  
  46.   
  47. _myCloudDocument.contents = _txtContent.text; ⑤  
  48.   
  49. [_myCloudDocument updateChangeCount:UIDocumentChangeDone];    ⑥  
  50.   
  51. }  
  52.   
  53. [[NSNotificationCenter defaultCenter] removeObserver:self  
  54.   
  55. name:UIDocumentStateChangedNotification object:nil]; ⑦  
  56.   
  57. //从文档协调者中解除CloudDocument对象  
  58.   
  59. [NSFileCoordinator removeFilePresenter:_myCloudDocument];     ⑧  
  60.   
  61. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值