博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
03-PIist存储-偏好设置-自定义对象归档
阅读量:5260 次
发布时间:2019-06-14

本文共 5324 字,大约阅读时间需要 17 分钟。

 

//  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 
@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 
// 如果一个自定义对象想要归档,必须遵守NSCoding协议,实现协议方法。@interface Person : NSObject
@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 
@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

 

转载于:https://www.cnblogs.com/laugh/p/6651309.html

你可能感兴趣的文章
2017前端面试题总结
查看>>
Http GetPost网络请求
查看>>
SWIFT国际资金清算系统
查看>>
关于拷贝构造函数与赋值构造函数的深刻解析
查看>>
Sping注解:注解和含义
查看>>
站立会议第四天
查看>>
用原生JS获取非行间样式
查看>>
toolbox类
查看>>
如何快速掌握一门技术
查看>>
利用AMPScript获取Uber用户数据的访问权限
查看>>
vagrant 同时设置多个同步目录
查看>>
python接口自动化28-requests-html爬虫框架
查看>>
爬虫学习笔记(一)初识爬虫
查看>>
生成随机数的模板
查看>>
SpringMVC文件上传
查看>>
hdu 2093
查看>>
纸上谈兵: 树, 二叉树, 二叉搜索树[转]
查看>>
Mysql 数据库操作
查看>>
SQL表中的自连接定义与用法示例
查看>>
hdu 1032 The 3n + 1 problem
查看>>