DevicelistArchiveModel.m 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. //
  2. // DevicelistArchiveModel.m
  3. // XMEye
  4. //
  5. // Created by XM on 208/4/27.
  6. // Copyright © 2018年 Megatron. All rights reserved.
  7. //
  8. #import "DevicelistArchiveModel.h"
  9. #import "DeviceObject.h"
  10. @implementation DevicelistArchiveModel
  11. {
  12. NSMutableArray *savedArray;
  13. NSMutableArray *deviceArray;
  14. }
  15. + (instancetype)sharedDeviceListArchiveModel {
  16. static DevicelistArchiveModel *sharedDeviceListModel = nil;
  17. static dispatch_once_t onceToken;
  18. dispatch_once(&onceToken, ^{
  19. sharedDeviceListModel = [[DevicelistArchiveModel alloc] init];
  20. });
  21. return sharedDeviceListModel;
  22. }
  23. - (instancetype)init {
  24. self = [super init];
  25. return self;
  26. }
  27. - (void)setReceivedSeviceArray:(NSMutableArray*)array {
  28. deviceArray = [array mutableCopy];
  29. }
  30. #pragma mark - 获取保存在本地的设备列表
  31. - (void)getSavedDeviceList:(NSString*)userName {
  32. //本地设备列表读区和处理
  33. if (userName == nil) {
  34. userName = @"local";
  35. }
  36. self.userName = userName;
  37. //1、读取本地保存的设备列表,应在登陆的时候读取
  38. NSData *myEncodedObject = [[NSUserDefaults standardUserDefaults] objectForKey:userName];
  39. @try{
  40. savedArray = [NSKeyedUnarchiver unarchiveObjectWithData: myEncodedObject];
  41. }
  42. @catch (NSException *exception) {
  43. }
  44. @finally {
  45. }
  46. if (savedArray == nil) {
  47. savedArray = [[NSMutableArray alloc] initWithCapacity:0];
  48. }
  49. }
  50. #pragma mark - 设备列表数据保存到本地
  51. - (void)saveDevicelist:(NSMutableArray *)deviceArray {
  52. if (deviceArray == nil || self.userName == nil || [self.userName isEqualToString:@""]) {
  53. return;
  54. }
  55. NSMutableArray *copyArray = [[NSMutableArray alloc]initWithArray:deviceArray copyItems:YES];//深拷贝数组文件
  56. dispatch_async(dispatch_get_global_queue(0, 0), ^{
  57. for (DeviceObject *deviceObj in copyArray) {//对将要保存的 数据的一些参数恢复默认
  58. for (ChannelObject *channel in deviceObj.channelArray) {
  59. }
  60. }
  61. NSData *archiveCarPriceData = [NSKeyedArchiver archivedDataWithRootObject:copyArray];
  62. if (archiveCarPriceData != nil) {
  63. [[NSUserDefaults standardUserDefaults] setObject:archiveCarPriceData forKey:self.userName];
  64. [[NSUserDefaults standardUserDefaults] synchronize];
  65. }
  66. });
  67. }
  68. #pragma mark 判断本地读取的设备列表和获取到的设备列表是否一致
  69. - (NSMutableArray *)devicelistCompare {
  70. if (deviceArray == nil || deviceArray.count == 0 || savedArray.count == 0) {
  71. //数据源不齐全,不比较,直接return
  72. return deviceArray;
  73. }
  74. //拷贝出来一个修正数组用于在对比过程中直接增删数据
  75. NSMutableArray *amendArray = [savedArray mutableCopy];
  76. //分别取出 本地设备序列号数组 和 获取到的设备序列号数组
  77. NSMutableArray *tmpArray = [[NSMutableArray alloc] initWithCapacity:0];
  78. NSMutableArray *tmpSaveArray = [[NSMutableArray alloc] initWithCapacity:0];
  79. for (int i =0; i< savedArray.count; i++) {
  80. DeviceObject *devObject = [savedArray objectAtIndex:i];
  81. [tmpSaveArray addObject:devObject.deviceMac];
  82. }
  83. for (int i =0; i< deviceArray.count; i++) {
  84. DeviceObject *devObject = [deviceArray objectAtIndex:i];
  85. [tmpArray addObject:devObject.deviceMac];
  86. }
  87. for (NSString *str in tmpSaveArray) {//在其他地方被删除的设备,需要从本地也删除
  88. if (![tmpArray containsObject:str]) {
  89. [amendArray removeObject:[self GetDeviceObjectBySN:str]];
  90. }
  91. }
  92. for (NSString *str in tmpArray) {//从其他地方添加的设备,需要在本地也添加
  93. if (![tmpSaveArray containsObject:str]) {
  94. [amendArray addObject:[deviceArray objectAtIndex:[tmpArray indexOfObject:str]]];
  95. }
  96. }
  97. //数据对比完成之后,再将修正数组复制给本地数组
  98. return [amendArray mutableCopy];
  99. }
  100. #pragma mark 通过序列号获取deviceObject对象
  101. - (DeviceObject *)GetDeviceObjectBySN:(NSString *)devSN {
  102. if (savedArray == nil || devSN == nil) {
  103. return nil;
  104. }
  105. for (int i = 0; i < savedArray.count; i ++) {
  106. DeviceObject *devObject = [savedArray objectAtIndex:i];
  107. if (devObject == nil) {
  108. continue;
  109. }
  110. if ([devObject.deviceMac isEqualToString:devSN]) {
  111. return devObject;
  112. }
  113. }
  114. return nil;
  115. }
  116. @end