首页 > 其他分享 >OC文件存储-补充

OC文件存储-补充

时间:2024-01-02 21:32:20浏览次数:35  
标签:文件 存储 OC Dog NSString 归档 path array data

NSKeyedArchiver-对象归档

对象归档是指将对象写入文件保存在硬盘上,再次打开程序可以还原对象。(序列化、持久化)

归档形式

  • 对foundation库中的对象进行归档
  • 单一对象
  • 归档
  • NSArray * arr = @[@1, @"sda"];
    NSString *homePath = NSHomeDirectory();
    NSString *path = [homePath stringByAppendingPathComponent:@"test.j"];// admin/目录下
    扩展名随便取都行
    
    bool res = [NSKeyedArchiver archiveRootObject:arr toFile:path];
    if(res){
        NSLog(@"succes");
    }
  • 解归档
  • NSString *home = NSHomeDirectory();
    NSString *path = [home stringByAppendingPathComponent:@"test.j"];
    NSArray * array = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
    NSLog(@"%@", array);
  • 缺点:一个归档对应一个解归档,类型多之后不好分辨类型
  • 多个对象
  • 归档
  • 使用NSData实例作为归档的数据存储
  • 添加归档的内容(key-value)
  • 完成归档
  • 将归档数据存入磁盘
  • NSString *home = NSHomeDirectory();
    NSString *path = [home stringByAppendingPathComponent:@"test.j"];
    
    NSMutableData *data = [NSMutableData data];
    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
    
    NSArray *array = @[@123, @"abc"];
    [archiver encodeObject:array forKey:@"nsarray"];
    [archiver encodeInt:2 forKey:@"count"];
    [archiver finishEncoding];
    
    BOOL res = [data writeToFile:path atomically:NO];
    if(res){
        NSLog(@"succes");
    }
  • 解归档
  • 从磁盘读取文件,生成NSData实例
  • 根据Data实例创建和初始化解归档实例
  • 解归档,根据key访问value
  • NSString *home = NSHomeDirectory();
        NSString *path = [home stringByAppendingPathComponent:@"test2.j"];
    
        NSData *data = [NSData dataWithContentsOfFile:path];
        NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
        这是老的初始化方式,新的要将安全编码设为NO
    //    NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingFromData:data error:nil];
    //    [unarchiver     setRequiresSecureCoding:NO];
        int count = [unarchiver decodeIntForKey:@"count"];
        NSArray *array = [unarchiver decodeObjectForKey:@"nsarray"];
        [unarchiver finishDecoding];
        NSLog(@"count = %d, array = %@", count, array);
  • 自定义对象进行归档(需要实现归档协议,NSCodeing[类似于java中的serilaizable)
  • 实例
  • // 遵守 NSCoding 协议
    @interface Dog : NSObject <NSCoding>
    
    @property (nonatomic, assign)int age;
    @property (nonatomic, copy)NSString *name;
    
    + (Dog *)dogWithName:(NSString *)name andAge:(int)age;
    
    @end
  • // 实现 NSCoding 协议方法
    @implementation Dog
    
    // 归档 方法,使用编码器将对象编码成二进制数据流,归档(持久化存储)
    - (void)encodeWithCoder:(NSCoder *)aCoder{
    
            [aCoder encodeInt:self.age forKey:@"age"];
            [aCoder encodeObject:self.name forKey:@"name"];
    }
    
    // 反归档 方法,将保存在磁盘上的二进制数据流,解码成 OC 对象
    - (id)initWithCoder:(NSCoder *)aDecoder{
        if(self = [super init]){
            self.age = [aDecoder decodeIntForKey:@"age"];
            self.name = [aDecoder decodeObjectForKey:@"name"];
        }
            return self;
    }
    
    @end
  • #import "Dog.h"
    
    // 文件路径
    NSString *achiverPath = [NSHomeDirectory() stringByAppendingString:@"/Desktop/dogAchiverFile"];
    
    Dog *dog = [Dog dogWithName:@"xiao hei" andAge:5];
    
    // 归档
    
    // 归档到文件
    BOOL bl = [NSKeyedArchiver archiveRootObject:dog toFile:achiverPath];
    
    // 反归档
    
    // 从文件反归档
    Dog *dogFromAchiverFile = [NSKeyedUnarchiver unarchiveObjectWithFile:achiverPath];

归档后的文件是加密的,属性列表是明文(参考OC中常用的类、数据类型、数据结构及结构体



标签:文件,存储,OC,Dog,NSString,归档,path,array,data
From: https://blog.51cto.com/u_16456705/9073082

相关文章

  • OpenEuler【NetworkManager】为什么ifcfg-ethX网卡配置文件修改后不生
    1问题现象修改/etc/sysconfig/network-scripts/ifcfg-ethX网卡配置文件中的ip地址后,重启NetworkManager服务,网卡ip未生效2问题原因在不重启系统的情况下,仅重启NetworkManager服务,它不会重新读取/etc/sysconfig/network-scripts/目录下的网卡配置文件并生效。可以通过以下几......
  • Kubernetes与Docker"分手"之后如何设计DevOps流水线
    一、前言总所周知,从Kubernetes1.24版本开始已经弃用Docker这个陪伴它风声水起的"初恋女友",届时在Kubernetes社区掀起了异常"轩然大波",影响甚至波及到社区之外的,也导致了Kubernetes不得不写好几篇博客来反复解释这么做的原因,虽然是老生常谈的问题了,如今距离1.24版本正式发布已过去......
  • 如何在 Ubuntu 20.04 上以独立模式设置 MinIO 对象存储服务器
    前些天发现了一个人工智能学习网站,通俗易懂,风趣幽默,最重要的屌图甚多,忍不住分享一下给大家。点击跳转到网站。如何在Ubuntu20.04上以独立模式设置MinIO对象存储服务器介绍存储非结构化对象数据blob并使其可通过HTTPAPI(称为对象存储)进行访问的能力是现代技术领域不可或......
  • uniapp中用户登录数据的存储方法探究
    Hello大家好!我是咕噜铁蛋!作为一个博主,我们经常需要在应用程序中实现用户登录功能,并且需要将用户的登录数据进行存储,以便在多次使用应用程序时能够方便地获取用户信息。铁蛋通过科技手段帮大家收集整理了些知识,今天讲和大家探究在uniapp中如何存储用户登录的所有数据。用户登录数......
  • javafx中PDF文件的展示(转图片)
    try{//加载pdf文件PDDocumentdocument=PDDocument.load(file);//将pdf转换成图片PDFRendererrenderer=newPDFRenderer(document);//获取pdf的页数intnumberOfPages=document.getNumberOfPages();PDFRendererpdfRenderer=newPDF......
  • 获取 app 内部的资源图片文件
    一、获取Assets.car:https://www.jianshu.com/p/7710c68f38cf首先去Mac上的AppStore下载AppleConfigurator2。然后把iphone连接上Mac,点击AppleConfigurator2菜单中->账户->登陆(用连接设备的AppleID)  打开登录.png  登录AppleID.png备份iPhone的内......
  • 使用Python找到和删除相似文件的方法
    在处理大量文件时,经常会遇到需要找到和删除相似文件的情况。本文将介绍如何使用Python编程语言来实现这一任务,以帮助提高文件管理的效率。导入必要的库我们首先需要导入以下两个Python标准库:importosimportfilecmpos库用于文件操作,包括获取文件路径、判断文件是否存在等功能。f......
  • EssentialsX 多功能管理插件配置文件参考
    EssentialsX是原Essentials插件的分支版本。参考:<https://wiki.mc-ess.net/wiki/><https://mineplugin.org/Essentials><https://essinfo.xeya.me/>配置文件plugins/Essentials/config.yml#############################################################+-------......
  • 文件上传以及出现的问题
    文件上传代码,可以直接去加入到工具类中去使用/** *通用上传请求(多个) */ @PostMapping("/uploads") publicAjaxResultuploadFiles(List<MultipartFile>files)throwsException{ try{ //上传文件路径 StringfilePath=YedSdkConfig.getUploadPath(); List......
  • 2023安卓期末大作业-记事本app(可以登录,含完整源码+程序设计报告+运行视频+apk导出文件
    2023安卓期末大作业-记事本app(可以登录,含完整源码+程序设计报告+运行视频+apk导出文件)打包文件如下图所示:基于Android系统的简单记事本,它能够便携记录生活和工作的诸多事情,从而帮助人们有条理的进行时间管理。一个记事本,能够输入标题和内容,创建日期、最新修改日期等信息。如果没......