iOS知识点

NSCoding归档自定义对象list

2020-04-10  本文已影响0人  Cherry_06

使用NSKeyedUnarchiver的unarchiveTopLevelObjectWithData方法获取对象,用rootObject获取到的为Nil

保存和读取一组自定义对象到本地文件:

其中tasks为实现了NSCoding协议的自定义对象list

保存:

if(@available(iOS11.0, *)) {     

          NSMutableData*data = [[NSMutableDataalloc]init];           

         NSKeyedArchiver*archiver = [[NSKeyedArchiveralloc]initForWritingWithMutableData:data];                           [archiverencodeObject:tasksforKey:@"tasks"];           

    [archiverfinishEncoding];           

    BOOLsuccess = [datawriteToFile:taskFilePathatomically:YES];   

        }else{         

      [NSKeyedArchiverarchiveRootObject:tasks toFile:taskFilePath];       

    }

读取:

 NSString *taskFileName = [NSString stringWithFormat:@"%@_Tasks", self.identifier];    NSString *taskFilePath = [self.downloadPath stringByAppendingPathComponent:taskFileName];    NSData *data = [[NSData alloc] initWithContentsOfFile:taskFilePath];      NSArray *tasks = nil;

 if (@available(iOS 11.0, *)) {       

NSError *error;       

NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingFromData:data error:&error];     

  tasks = [unarchiver decodeObjectForKey:@"tasks"];     

      }        return tasks; 

  } else {     

  tasks = [NSKeyedUnarchiver unarchiveObjectWithFile:taskFilePath];   

    }     

  return tasks;    

}

保存和读取一组自定义对象到NSUserDefault:

保存:

  if (@available(iOS 11.0, *)) {           

      NSData *data = [NSKeyedArchiver archivedDataWithRootObject:tasks requiringSecureCoding:NO error:nil];                 [[NSUserDefaults standardUserDefaults] setObject:data forKey:@"CYDownloadTasks"];                 [[NSUserDefaults standardUserDefaults] synchronize];          

  } else {            

    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:tasks];            

    [[NSUserDefaults standardUserDefaults] setObject:data forKey:@"CYDownloadTasks"];       

        [[NSUserDefaults standardUserDefaults] synchronize];        

    }

读取:

 NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];        NSData *savedTasks = [currentDefaults objectForKey:@"CYDownloadTasks"];

if (@available(iOS 11.0, *)) { 

          NSError *error;         

  NSArray *tasks = [NSKeyedUnarchiver unarchiveTopLevelObjectWithData:savedTasks error:&error];     

      if (error) {                NSLog(@"%@",error.localizedDescription);         

  }                    }           

return tasks;       

} else {          

    NSArray *tasks = [NSKeyedUnarchiver unarchiveObjectWithData:savedTasks];        

}

上一篇下一篇

猜你喜欢

热点阅读