iOS 模拟解决多个客户端对同一Item进行编辑
来源:互联网 发布:淘宝客设置技巧 编辑:程序博客网 时间:2024/06/06 16:36
需求是这样的:当我们的产品处于Offline 的状态时我们是可以对产品内部进行增删改的,只不过我们点击Save 之后会把我们的操作结果储存在本地缓存中,等到我们处于Online的状态的时候在向服务端进行发送,这就有可能出现一个Conflict,就是在我们Offline这段时间有其他的客户端对该产品进行了更改或者删除,这时候我们就需要通过对比ModifyTime 来进行取舍,最终保留ModifyTime 较晚的那个Edit 或者Delete,下面是我模拟解决该问题的部分代码:
#import "ViewController.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; [self setData];// [self.arrayData replaceObjectAtIndex:1 withObject:@"F"]; double delayzhangsanInSeconds = 3.0; dispatch_time_t zahngsanpopTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayzhangsanInSeconds * NSEC_PER_SEC)); dispatch_after(zahngsanpopTime, dispatch_get_main_queue(), ^(void){ [self assignment:self.lastOptionDate changeData:@"zhangsan" myOptionDate:self.zhangsan.OptionDate array:self.arrayData]; }); const char *queueName = [@"hwj" UTF8String]; dispatch_queue_attr_t myQueue = dispatch_queue_create(queueName, NULL); double delaylisiInSeconds = 6.0; dispatch_time_t lisipopTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delaylisiInSeconds * NSEC_PER_SEC)); dispatch_after(lisipopTime, myQueue, ^(void){ [self assignment:self.lastOptionDate changeData:@"lisi" myOptionDate:self.lisi.OptionDate array:self.arrayData]; }); }- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}/** * 设置初始化数据 */- (void)setData{ NSDate *data = [NSDate date]; self.lastOptionDate = [data dateByAddingTimeInterval:-3600]; NSMutableArray *array= [[NSMutableArray alloc]initWithObjects:@"a",@"b",@"c",nil]; self.arrayData = array; self.zhangsan = [[Person alloc]init]; self.lisi =[[Person alloc]init]; self.zhangsan.OptionDate = data; self.lisi.OptionDate = [data dateByAddingTimeInterval:2];}/** * 对该数组中元素进行更改 * * @param lastOptionDate 最近一次更改的时间 * @param data 把数组中对应索引位置的元素替换成该值 * @param myDate 本次进行Option 的时间 * @param array 要操作的数组 */- (void)assignment:(NSDate * )lastOptionDate changeData:(NSString * )data myOptionDate:(NSDate *)myDate array:(NSMutableArray*)array{ if([lastOptionDate isEqualToDate:[lastOptionDate earlierDate:myDate]]){ //进行操作 [array replaceObjectAtIndex:1 withObject:data]; self.lastOptionDate = myDate; NSLog(@"++++++%@",self.arrayData[1]); }else{ return; }}@end
还有一个Person的类,其中只有 name和Optiondate 在这里就不赘述了。。
由于李四的修改时间晚于张三的修改时间,由程序协定的时张三延迟三秒执行,李四延迟六秒执行,所以运行图如下:
由于李四的修改时间晚于张三的修改时间,如果张三延迟六秒执行,李四延迟三秒执行,所得运行图如下:
这里由于李四先执行的,而张三的Modify 时间又早于李四,所以张三的Modify 不生效
1 0
- iOS 模拟解决多个客户端对同一Item进行编辑
- 对同一个数组进行多次初始化
- IOS:对表视图进行编辑
- APP 缓存数据线程安全问题,多个线程同时对同一资源进行读写问题
- 分割图像并指定多个灰度阀值,对同一幅图像进行分区域的二值化
- 同一客户端多个git账号的配置
- linux同一客户端多个git账号的配置
- 模拟多客户端进行TCP连接[Java]
- 多个线程对同一控件的修改
- jquery如何对多个对象绑定同一事件
- jquery如何对多个对象绑定同一事件
- 多个进程对同一文件写入的问题
- 解决同一浏览器登录多个账户session共享问题
- iOS同一项目多个Target的快速实现方法
- 对同一文件进行多线程写入
- 多线程对同一数据进行不同操作
- SE16N对数据表进行编辑
- Laravel 调用 个推 对Android和IOS进行推送
- js操作cookie
- 自己做的漫画阅读APP.
- 嵌入式产品开发流程
- QT 多线程程序设计
- Entity Framework 数据生成选项DatabaseGenerated
- iOS 模拟解决多个客户端对同一Item进行编辑
- 数据库异常:“Column 'CODE' in where clause is ambiguous”
- String.split()函数使用注意事项
- Qt 多线程
- poll函数
- Python(二)在PyCharm下的键盘抓取函数
- 窗口控制
- Android事件分发机制练习---打造属于自己的瀑布流
- 怎么在谷歌浏览器中安装.crx扩展名的离线Chrome插件