IOS_UI_本地存储-复杂的对象写入本地

本文介绍如何通过实现NSCoding协议来实现复杂对象的归档与解档过程,包括定义Boss类及其属性,并实现编码与解码方法,最后演示了如何将Boss对象写入文件并从中读取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

复杂对象写入需要建一个类

先建一个Boss的类

#import <Foundation/Foundation.h>

//如果让一个类的所有属性的值都可以移动到一起,方便写入磁盘.系统提供了一个协议:<NSCoding>

@interface Boss : NSObject<NSCoding>

@property (nonatomic,retain)NSString *name;

@property (nonatomic,retain)NSString *gender;

@property (nonatomic,assign)NSInteger age;

@property (nonatomic,assign)NSInteger number;


@end

#import "Boss.h"


@implementation Boss

//两个必须实现的协议方法

- (void)encodeWithCoder:(NSCoder *)aCoder

{

    //编码的方法 把不同数据写到一个地方

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

    [aCoder encodeObject:self.gender forKey:@"gender"];

    [aCoder encodeInteger:self.number forKey:@"number"];

    [aCoder encodeInteger:self.age forKey:@"age"];

    

}


- (id)initWithCoder:(NSCoder *)aDecoder

{

    //解码的方法 初始化方法作用是给创建的对象一个初始值

    self = [super init];

    if (self) {

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

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

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

        self.number = [aDecoder decodeIntegerForKey:@"number"];

    }

    

    

    return self;

}

- (void)dealloc

{

    [_name release];

    [_gender release];

    [super dealloc];

}

@end


- (void)viewDidLoad {

    [super viewDidLoad];

 //复杂对象写入本地

    //新建一个boss类

    Boss *boss = [[Boss alloc]init];

    boss.name = @"大魔王";

    boss.gender = @"未知";

    boss.age = 1000;

    boss.number = 1;

    

    NSString *bossPath = [docPath stringByAppendingPathComponent:@"boss.suibian"];

    

    //归档类(把复杂对象的数据写入本地)

    [NSKeyedArchiver archiveRootObject:boss toFile:bossPath];

    //反归档(按照路径读取数据写入本地)

   Boss *newBoss = [NSKeyedUnarchiver unarchiveObjectWithFile:bossPath];

    NSLog(@"%@",newBoss.name);

    NSLog(@"%@,%@",boss,newBoss);

    

    [boss release];

    

    //快速将一个简单对象写入本地

    //单例: 一个应用程序的执行期间,只能创建出一个对象.

    //对于一个单例,系统都会提供一个+号方法作为创建/获取对象的方法

    //这个方法第一次使用会创建一个对象,之后使用都是直接获取这个对象

//    [NSFileManager defaultManager]

//    [UIApplication sharedApplication]

//    [UIScreen mainScreen ]

//    [NSOperationQueue mainQueue]

//    [UIDevice currentDevice]

//    [NSThread mainThread];

    //存

    [[NSUserDefaults standardUserDefaults] setObject:@"qianqian" forKey:@"saveName"];

//    //把现有的更改同步到本地

    [[NSUserDefaults standardUserDefaults]synchronize];

   //取

    NSLog(@"%@",[[NSUserDefaults standardUserDefaults]objectForKey:@"saveName"]);

    

    

    NSUserDefaults *userDe = [NSUserDefaults standardUserDefaults];

    //取值

    NSString *result = [userDe objectForKey:@"firstTime"];

    if (result == nil) {

        NSLog(@"第一次");

        [userDe setObject:@"suibian" forKey:@"firstTime"];

        [userDe synchronize];

    }else{

        NSLog(@"不是第一次");

    }

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值