iOS开发之 UIAlertView 沙盒 归档

一、UIAlertView


- (void)showAlertWithMassage:(NSString *)message

{

    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"账号注册" message:message delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];

        [alert show];

}

调用的时候  [self showAlertWithMassage:@"请输入账号"];


二、沙盒

1、沙盒(sandbox

    ios的沙盒(sandbox)机制:是一种安全体系,ios应用程序只能对自己创建的应用程序进行读取文件,这个独立、封闭、安全的空间,就是我们所说的沙盒。它里面一般存放着你的程序需要的文件,数据持久化的一些文件(Plist sqlite...)音视频,图片及其他资源文件。每一个应用程序只有一个沙盒


2、沙盒里面有三个文件夹

     1.Documents   目录下得内容  会被同步到另一台设备 可以放 媒体资源 文本资源

     2.Library  可以把缓存的内容放到Library里面/Cashes

     3.tmp  创建临时文件的目录,当我们的设备重启时,文件会被自动清除


3、1⃣️获得根目录的方式

    NSString *homePath = NSHomeDirectory();

    NSLog(@“%@",homePath);

  2⃣️获得Documents的方式

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

    NSString *DocumentsPath = [paths firstObject];

    NSLog(@“%@",DocumentsPath);

     3⃣️Library目录

    NSArray *paths2 = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);

    NSString *LibraryPath = [paths2 lastObject];

    NSLog(@"%@",LibraryPath);

     4⃣️tmp目录

    NSString *tmpPath = NSTemporaryDirectory();

    NSLog(@“%@",tmpPath);


三、归档

归档 NSKeyedArchiver  解归档NSKeyedUnarchiver

1、归档 又叫序列化(coding) 归档之后的文件会被加密   可以归档的文件、数据 : 任何数据(直接归档一个类实例化的对象 数组 字典 字符串 文本 图片 ...)


2、归档  NSKeyedArchiver 步骤

//    1、归档路径 需要归档的数据

//    2、归档、解归档

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

    NSString *path = [[paths lastObject] stringByAppendingPathComponent:@“userList.achiver"];


    NSArray *users = @[@"葫芦娃",@"喵喵",@"汪汪"];

    BOOL success = [NSKeyedArchiver archiveRootObject:users toFile:path];

    if (success) {

        [self showAlertWithMessage:@"归档成功"];

    }

    NSLog(@“%@",path);



 解归档

//    1、解归档的文件路劲(和归档的文件路径一样)

//    2、解归档

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

    NSString *path = [[paths lastObject]stringByAppendingPathComponent:@"userList.achiver"];

    NSArray *list = [NSKeyedUnarchiver unarchiveObjectWithFile:path];


如果要添加东西进原来的数组里面,则

    NSMutableArray *arr = [list mutableCopy];

    [arr addObject:@"A"];

    

    for (NSString *name in arr) {

        NSLog(@"%@",name);

    }


                —————第二种归档方式————-

    

  NSData 二进制数据的一个类

    

归档

//    1、归档文件路径 准备需要归档的数据

//    2、写一个可变的二进制文件数据NSMutableData 通过归档的类 Data写入到文件

//    3、开始(归档)编码

//    4、结束(归档)编码 Data数据写入到文件

  


//    1、归档文件路径 准备需要归档的数据

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

    NSString *path = [[paths lastObject]stringByAppendingPathComponent:@"userList1.achiver"];

    NSArray *list = @[@"111",@"222",@"333"];

    NSDictionary *dic = @{@"key":@"value"};

    

//    2、写一个可变的二进制文件数据NSMutableData 通过归档的类 Data写入到文件

    NSMutableData *data = [[NSMutableData alloc]init];

    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];

    

//    3、开始(归档)编码 (编码的key 和解码时候的key 一定要统一)

    [archiver encodeObject:list forKey:@"list"];

    [archiver encodeObject:dic forKey:@"dic"];

    

//    4、结束(归档)编码 Data数据写入到文件

    

    [archiver finishEncoding];

    BOOL success = [data writeToFile:path atomically:YES];//    atomically 如果设置成yes的时候 在写入数据时 如果出现意外情况(用户突然强制退出了应用程序、断电...)会把写入到临时文件的内容清除掉,不再写入到目标文件       如果是no,不管数据是否完整,都会直接写入到目标文件

    if (success) {

        [self showAlertWithMessage:@"归档成功"];

    }




————————————————————————————————————-


 解归档

//    1、文件路径

//    2、读取文件里面data数据

//    3、通过解归档对象 读取data数据 准备解归档

//    4、解归档数据

  


//    1、文件路径

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

    NSString *path = [[paths lastObject]stringByAppendingPathComponent:@"userList1.achiver"];

//    2、读取文件里面data数据

        NSData *data = [NSData dataWithContentsOfFile:path];

//    3、通过解归档对象 读取data数据 准备解归档

    NSKeyedUnarchiver *unArchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:data];

//    4、解归档数据

    NSArray *arr = [unArchiver decodeObjectForKey:@"list"];

    NSDictionary *dic = [unArchiver decodeObjectForKey:@"dic"];

    

    NSLog(@"%@\n%@",arr,dic);




————- 想归档自定义类的对象(UserModelhm)————-

//    1、遵守归档协议NSCoding

//    2、实现归档协议里面的方法

//    3、逐一对自定义类里面的属性进行了编码和解码 这时候,这个对象就具备了归档 解归档的功能

//    4、开始归档,解归档

    

//    归档

//      1、准备要归档文件的路径 要归档的数据

//      2、进行归档

   /*

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

    NSString *path = [[paths lastObject]stringByAppendingPathComponent:@"UserModel.archiver"];

    

    UserModel *model = [[UserModel alloc]init];

    model.name = @"葫芦娃";

    model.age = 18;

    BOOL success = [NSKeyedArchiver archiveRootObject:model toFile:path];

    if (success) {

        [self showAlertWithMessage:@"归档成功"];

    }


在userModel.h中

<span style="font-size:14px;">@property (nonatomic,copy)NSString *name;
@property (nonatomic,assign)NSInteger age;</span>

。m中

<span style="font-size:14px;">//对UserModel对象里面的每一个属性编码
- (void)encodeWithCoder:(NSCoder *)aCoder
{
    [aCoder encodeObject:self.name forKey:@"name"];
    [aCoder encodeInteger:self.age forKey:@"age"];
    
}

//对UserModel对象进行解码
- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super init];
    if (self) {
        self.name = [aDecoder decodeObjectForKey:@"name"];
        self.age = [aDecoder decodeIntegerForKey:@"age"];
        
    }
    return self;
}</span>





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值