• UI学习笔记---第十四天数据持久化


    一.沙盒机制

    每个应用程序位于文件系统的严格限制部分

    每个应用程序只能在为该程序创建的文件系统中读取文件

    每个应用程序在iOS系统内斗放在了统一的文件夹目录下

    沙盘路径的位置

    1. 通过Finder查找程序沙盘相对路径

    ~/Library/Application Support/iPhone Simulator

    2. 通过代码查找程序沙盘相对路径

    NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory directory,NSSearchPathDomainMask domainMask,BOOL expandTilde); 

    常见问题:

    模拟器路径内有可能包含多个系统版本的路径

    NSDocumentDirectory————>Documents文件夹

    NSDocumentationDirectory——>Documentation文件夹   //不属于iOS  是Mac-os x中使用

    NSTemporaryDirectory()———>tmp文件夹

    NSLibraryDirectory——————>Library文件夹 

    二.简单对象写入文件

    文件存储的相对目录

    //获取所有的documents文件夹

    NSArray *documentList =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES); 

    //将最后一个documents文件夹路径作为问价的存储目录

    NSString *documentsPath = documentList.lastObject;

    字符串对象写入文件

    数组对象写入文件

    字典对象写入文件

    二进制对象写入文件

    三.复杂对象写入文件

    什么是复杂对象

    1.在Foundation框架内不存在的数据类

    2.无法在程序内通过writeToFile类型的方法写入到文件内

    3.复杂对象至少包含一个实例对象

    构造复杂对象的生成类

    @interface ABPersonInfo : NSObject

    @property (nonatomic ,retain) NSString *name;

    @property (nonatomic ,retain) NSNumber *age;

    @end
    @implementation ABPersonInfo
    @end 

    NSCoding协议

    @protocol NSCoding
    - (void)encodeWithCoder:(NSCoder *)aCoder;

    - (id)initWithCoder:(NSCoder *)aDecoder;

    @end 

    使复杂对象接受NSCoding协议

    @interface ABPersonInfo:NSObject<NSCoding>

    使复杂对象实现NSCoding协议

    @implementation ABPersonInfo

    - (id)initWithCoder:(NSCoder *)aDecoder{

        self = [super init]; if (self) {

            self.age = [aDecoder decodeObjectForKey:@"age"];

            self.name = [aDecoder decodeObjectForKey:@"name"]; }

        return self; }

    - (void)encodeWithCoder:(NSCoder *)aCoder{

        [aCoder encodeObject:self.age forKey:@"age"]; [aCoder encodeObject:self.name forKey:@"name"];

    }

    @end

    将复杂对象ABPersonInfo的实例对象写入文件

  • 相关阅读:
    3.Golang运算符
    下载nodejs和vue
    快速排序
    apache部署react刷新路由导致错误The requested URL * was not found on this server.
    关于数据可水平拆分和垂直拆分的学习记录
    javascript 类流程图控件
    Jenkins 安装和配置
    【前端开发】跨域请求如何携带cookie
    【前端开发】基于vue+elementui架构的图片上传实时预览demo
    【前端开发】Promise几种常见用法
  • 原文地址:https://www.cnblogs.com/limicheng/p/3876673.html
Copyright © 2020-2023  润新知