zoukankan      html  css  js  c++  java
  • 03-PIist存储-偏好设置-自定义对象归档

    //  ViewController.m
    //  05-PIist存储
    #import "ViewController.h"
    #import "Person.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    // 点击存储的时候调用
    - (IBAction)save:(id)sender {
        Person *p = [[Person alloc] init];
        // Plist注意:不能存储自定义对象
        // Plist:数组和字典,
        // 如何判断一个对象能不能使用Plist,就看下有没有writeToFile
        NSArray *arr = @[@"123",@1,p];
    
        
        // 获取应用的文件夹(应用沙盒)
    //    NSString *homePath = NSHomeDirectory();
        
        // 获取temp
    //    NSTemporaryDirectory();
        
        // 获取Cache文件路径
        // NSSearchPathDirectory:搜索的目录
        // NSSearchPathDomainMask:搜索范围 NSUserDomainMask:表示在用户的手机上查找
        // expandTilde 是否展开全路径,如果没有展开,应用的沙盒路径就是~
        // 存储一定要要展开路径
        NSString *cachePaht = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
        
        
        // 拼接文件名
        NSString *filePath = [cachePaht stringByAppendingPathComponent:@"personArr.plist"];
        
        
        
        NSLog(@"%@",cachePaht);
        
        
        // File:文件的全路径
        [arr writeToFile:filePath atomically:YES];
        
    }
    
    - (IBAction)read:(id)sender {
        
        NSString *cachePaht = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
        
        
        // 拼接文件名
        NSString *filePath = [cachePaht stringByAppendingPathComponent:@"arr.plist"];
        
       NSArray *arr = [NSArray arrayWithContentsOfFile:filePath];
        
        NSLog(@"%@",arr);
        
    }
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
    }
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    @end
    //
    //  Person.h
    //  05-PIist存储
    
    #import <Foundation/Foundation.h>
    
    @interface Person : NSObject
    
    @end
    //
    //  Person.m
    //  05-PIist存储
    
    #import "Person.h"
    
    @implementation Person
    
    @end
    06-偏好设置
    //
    //  ViewController.m
    //  06-偏好设置
    #import "ViewController.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    // 偏好设置存储:
    // 好处:1.不需要关心文件名
    // 2.快速做键值对存储
    
    // 底层:就是封装了一个字典
    // account:xmg pwd:123 rmbPwd:YES
    - (IBAction)save:(id)sender {
        
        NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
        
        [userDefaults setObject:@"xmg" forKey:@"account"];
        [userDefaults setObject:@"123" forKey:@"pwd"];
        [userDefaults setBool:YES forKey:@"rmbPwd"];
        // 在iOS7之前,默认不会马上把跟硬盘同步
        // 同步
        [userDefaults synchronize];
        
        
        
    }
    - (IBAction)read:(id)sender {
       NSString *pwd = [[NSUserDefaults standardUserDefaults] objectForKey:@"pwd"];
        
        NSLog(@"%@",pwd);
        
    }
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
    }
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    @end

    自定义归档

    //
    //  ViewController.m
    //  07-自定义对象归档
    
    #import "ViewController.h"
    #import "Person.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    - (IBAction)save:(id)sender {
        
        Person *p = [[Person alloc] init];
        p.age = 18;
        
        // 获取cache
        NSString *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
        
        // 获取文件的全路径
        NSString *filePath = [cachePath stringByAppendingPathComponent:@"person.data"];
        
        // 把自定义对象归档
        [NSKeyedArchiver archiveRootObject:p toFile:filePath];
        
    }
    - (IBAction)read:(id)sender {
        
        // 获取cache
        NSString *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
        
        // 获取文件的全路径
        NSString *filePath = [cachePath stringByAppendingPathComponent:@"person.data"];
        
        // 解档
        Person *p = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
        
        NSLog(@"%d",p.age);
        
    }
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
    }
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    @end
    //
    //  Person.h
    //  07-自定义对象归档
    #import <Foundation/Foundation.h>
    
    // 如果一个自定义对象想要归档,必须遵守NSCoding协议,实现协议方法。
    @interface Person : NSObject<NSCoding>
    @property (nonatomic, assign) int age;
    @property (nonatomic, strong) NSString* name;
    @end
    //
    //  Person.m
    //  07-自定义对象归档
    
    #import "Person.h"
    
    @implementation Person
    
    // 什么时候调用:自定义对象归档的时候
    
    // 作用:用来描述当前对象里面的哪些属性需要归档
    - (void)encodeWithCoder:(NSCoder *)aCoder
    {
        // name
        [aCoder encodeObject:_name forKey:@"name"];
        
        // age
        [aCoder encodeInt:_age forKey:@"age"];
        
    }
    
    
    // 什么时候调用:解档对象的时候调用
    
    // 作用:用来描述当前对象里面的哪些属性需要解档
    // initWithCoder:就是用来解析文件的。
    - (id)initWithCoder:(NSCoder *)aDecoder
    {
        // super:NSObject
    #warning 什么时候需要调用initWithCoder
        if (self = [super init]) {
            
            // 注意:一定要给成员变量赋值
            // name
           _name = [aDecoder decodeObjectForKey:@"name"];
            
            // age
           _age = [aDecoder decodeIntForKey:@"age"];
    
        }
        return self;
        
        
    }
    @end
    //
    //  RedView.h
    //  07-自定义对象归档
    #import <UIKit/UIKit.h>
    
    @interface RedView : UIView
    
    @end
    //  RedView.m
    //  07-自定义对象归档
    #import "RedView.h"
    
    @implementation RedView
    
    // 解析文件都会调用这个方法
    
    - (id)initWithCoder:(NSCoder *)aDecoder
    {
        
        // 只要父类遵守了NSCoding,就调用initWithCoder
        // 先初始化父类
        if (self = [super initWithCoder:aDecoder]) {
            NSLog(@"%s",__func__);
        }
        
        return self;
    }
    
    
    // 通过代码初始化的时候,调用init方法,底层就会调用initWithFrame
    - (instancetype)initWithFrame:(CGRect)frame
    {
        if (self = [super initWithFrame:frame]) {
            NSLog(@"%s",__func__);
        }
        return self;
    }
    @end
    本人无商业用途,仅仅是学习做个笔记,特别鸣谢小马哥,学习了IOS,另日语学习内容有需要文本和音频请关注公众号:riyuxuexishuji
  • 相关阅读:
    AgularJS中Unknown provider: $routeProvider解决方案
    AngularJS依赖注入
    下面是Webstorm的一些常用快捷键:
    加载多张图片,判断加载完成状态
    JS控制图片显示的大小(图片等比例缩放)
    JS中两个重要的方法 call & apply 学习
    如何用微软雅黑显示自己网页的字体
    Dev-C++的一些使用技巧快捷键
    C C语言中 *.c和*.h文件的区别!
    HTML <!--...--> 注释 、CSS/JS //注释 和 /*.....*/ 注释
  • 原文地址:https://www.cnblogs.com/laugh/p/6651309.html
Copyright © 2011-2022 走看看