美文网首页iOS知识点
NSCoding归档自定义对象list

NSCoding归档自定义对象list

作者: Cherry_06 | 来源:发表于2020-04-10 16:25 被阅读0次

使用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];        

}

相关文章

  • iOS文件归档NSKeyedArchiver的使用

    NSKeyedArchiver可以归档系统对象,也可以归档自定义对象,不过自定义对象要实现NSCoding协议: ...

  • NSCoding归档自定义对象list

    使用NSKeyedUnarchiver的unarchiveTopLevelObjectWithData方法获取对象...

  • Runtime应用之对象归档

    使用归档的方法能保存对象,自定义的对象是无法直接归档的,要让自定义的对象遵守协议NSCoding,并且要实现协议N...

  • iOS 13归档解档

    归档解档的使用 自定义类对象要进行归档,那么这个对象的属性所属的类必须要遵守归档协议NSCoding必须在需要归档...

  • 如何把一个包含自定义对象的数组序列化到磁盘?

    采用归档和解档对自定义对象进行本地磁盘存取。 自定义的类需要遵守NSCoding 并实现-(instancetyp...

  • OC NSArray&NSMutableArray,解归

    解归档: 对象实现NSCoding协议,实现两个方法 归档 解归档 NSArrary & NSMutableArr...

  • iOS存储

    解档归档 需要遵守NScoding协议 优点:存储自定义数据对象 缺点:只能一次性归档保存以及一次性解压。所以针对...

  • 归档NSSecureCoding的使用

    NSCoding是一种非安全的编解码方式,使用NSKeyedArchiver归档自定义类对象做持久化存储。由于未做...

  • 归档自定义对象

    对于归档的对象,其类要服从NSCoding协议

  • 归档

    1、什么叫归档归档:即序列化。任何对象都可以遵循协议进行归档。通过对数据模型对象进行归档可以轻...

网友评论

    本文标题:NSCoding归档自定义对象list

    本文链接:https://www.haomeiwen.com/subject/nxsbyctx.html