iOS 使用plist和归档存储数据

1使用plist文件存储数据

首先要知道的是,使用plist存储数据,只能存储OC自带的数据字典和数组,无法存储自定义的数据model,例子看info.plist的样式就知道了

将数据存储到plist文件中

//获取本地沙盒路径
    NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    //获取完整路径
    NSString *docPath = [path objectAtIndex:0];
    // 3.新建数据
    NSMutableArray *data = [[NSMutableArray alloc] initWithObjects:@"232",@"jee", nil];
    NSString *filepath = [docPath stringByAppendingPathComponent:@"data.plist"];
    NSString *str = @"21323";
    [data insertObject:str atIndex:0];
    [data writeToFile:filepath atomically:YES];


读取并修改plist文件

//获取本地沙盒路径
    NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    //获取完整路径
    NSString *docPath = [path objectAtIndex:0];
    // 3.文件路径
    NSString *filepath = [docPath stringByAppendingPathComponent:@"data.plist"];
    
    // 4.读取数据
    NSMutableArray *data = [NSMutableArray arrayWithContentsOfFile:filepath];
    // 5.修改数据
    NSString *str = @"wwwww";
    [data insertObject:str atIndex:0];
    [data writeToFile:filepath atomically:YES];
    NSLog(@"%@", data);




2.使用归档存储数据

使用归档存储就可以存储自定义的model数据了

首先将让model遵循NSCoding协议

#import <Foundation/Foundation.h>

@interface SubData : NSObject<NSCoding>
@property (copy, nonatomic) NSString * name;
@property (copy, nonatomic) NSString * code;
@property (copy, nonatomic) NSString * imgUrl;
@property (copy, nonatomic) NSString * sub;
@property (copy, nonatomic) NSString * url;

@end

然后在m文件中

// 当将一个自定义对象保存到文件的时候就会调用该方法
// 在该方法中说明如何存储自定义对象的属性
// 也就说在该方法中说清楚存储自定义对象的哪些属性
- (void)encodeWithCoder:(NSCoder *)aCoder
{
    [aCoder encodeObject:self.name forKey:@"name"];
    [aCoder encodeObject:self.code forKey:@"code"];
    [aCoder encodeObject:self.imgUrl forKey:@"imgUrl"];
    [aCoder encodeObject:self.sub forKey:@"sub"];
    [aCoder encodeObject:self.url forKey:@"url"];
}

// 当从文件中读取一个对象的时候就会调用该方法
// 在该方法中说明如何读取保存在文件中的对象
// 也就是说在该方法中说清楚怎么读取文件中的对象
- (id)initWithCoder:(NSCoder *)aDecoder
{
    //注意:在构造方法中需要先初始化父类的方法
    if (self=[super init]) {
        self.name=[aDecoder decodeObjectForKey:@"name"];
        self.code=[aDecoder decodeObjectForKey:@"code"];
        self.imgUrl=[aDecoder decodeObjectForKey:@"imgUrl"];
        self.sub=[aDecoder decodeObjectForKey:@"sub"];
        self.url=[aDecoder decodeObjectForKey:@"url"];
    }
    return self;
}

这样在model中的设置就完成了,接下来是使用时的代码

将数据存储到文件中

//获取文件路径
        NSString *docPath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
        NSString *path=[docPath stringByAppendingPathComponent:@"recentlyUsed.archiver"];
        NSMutableArray *subDataArray = [[NSMutableArray alloc] init];
        
        [subDataArray insertObject:model atIndex:0];
        //将自定义的对象保存到文件中,调用NSKeyedArchiver的工厂方法 archiveRootObject: toFile: 方法
        [NSKeyedArchiver archiveRootObject:subDataArray toFile:path];

解档

//1.获取文件路径
    NSString *docPath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
    NSString *path=[docPath stringByAppendingPathComponent:@"recentlyUsed.archiver"];
    
    //2.从文件中读取对象,解档对象就调用NSKeyedUnarchiver的一个工厂方法 unarchiveObjectWithFile: 即可。
    if([GYGeneralTools isFileExist:@"recentlyUsed.archiver"]) {
        self.recentlyUsedArray = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
    }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值