iOS开发-数组本地存储, JSONModel本地储存实现

本文介绍了如何在iOS应用中实现数组本地化存储和Model的持久化。通过使用NSArray的writeToFile方法和NSKeyedArchiver进行序列化,可以将数据保存到本地。同时,展示了如何从本地文件读取数据并反序列化回原来的数组和Model对象。文中给出了具体的代码示例,包括使用JSONModel库来处理Model的编码和解码。

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

一:数组本地化实现

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

    NSString *documents = [array1 lastObject];

    NSString *documentPath = [documents stringByAppendingPathComponent:@"arrayXML.xml"];

 

   // 准备好要存到本地的数组

    NSArray *dataArray= [NSArray arrayWithArray:[responseobjectForKey:@"data"]];

   //将数组存入到指定的本地文件

    BOOLisyes = [dataArray writeToFile:documentPathatomically:YES];

   //可对已经存储的数组进行查询等操作

 

    NSArray *resultArray = [NSArray arrayWithContentsOfFile:documentPath];

    NSLog(@"%@,isyes=%d", documentPath,isyes);

二:本地存储Model 

  - (void)saveUserInfo:(UserInfoModel *)userinfo {

    

     NSData *data = [NSKeyedArchiver archivedDataWithRootObject:userinfo];

     [UserDefaultHandler saveUserDetault:datakey:kUserInfoData];

注意:UserDefaultHandler中方法如下:【//UserDefaultHandler.m

+(void)saveUserDetault:(id) object key:(NSString *)key{

    [[NSUserDefaults standardUserDefaults] setValue:object forKey:key];

    [[NSUserDefaults standardUserDefaults] synchronize];

}】

    //取数据,解码

    //    NSData *data = [UserDefaultHandler getUserDetaultData:kUserInfoData];

    //    UserInfoModel *userinfo = [NSKeyedUnarchiver unarchiveObjectWithData:datas];

   }

   UserInfoModel.h

 

#import <JSONModel/JSONModel.h>

 

@class UserInfoModel;

@interface BPLoginResultModel :JSONModel

@property(nonatomic,strong)UserInfoModel<Optional> *UserInfo;

@end

 

@interface UserInfoModel : JSONModel<NSCoding>

@property (nonatomic,strong)NSString<Optional> *CardFaceNo;//卡面号

@property (nonatomic,strong)NSString<Optional> *VipName;//姓名

 

@end

 

   UserInfoModel.m

 

 

#import "BPLoginResultModel.h"

 

@implementation BPLoginResultModel

 

@end

@implementation UserInfoModel

- (void)encodeWithCoder:(NSCoder *)aCoder

{

    [aCoder encodeObject:self.CardFaceNoforKey:@"CardFaceNo"];

    [aCoder encodeObject:self.VipNameforKey:@"VipName"];

    

}

- (instancetype)initWithCoder:(NSCoder *)aDecoder

{

    if (self = [superinit]) {

        self.CardFaceNo = [aDecoderdecodeObjectForKey:@"CardFaceNo"];

        self.VipName = [aDecoderdecodeObjectForKey:@"VipName"];

    }

    returnself;

}

@end

三:数组元素是model的数组本地存储

 

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

    NSString *documents = [array1lastObject];

    NSString *documentPath = [documentsstringByAppendingPathComponent:arrayName];

    // 准备好要存到本地的数组

    NSArray *dataArray= [NSArrayarrayWithArray:erpUserList];

    

    //    将数组序列化后再存储

    NSData *arrayData = [NSKeyedArchiverarchivedDataWithRootObject:dataArray];

    BOOL isTureWrite = [arrayDatawriteToFile:documentPathatomically:YES];

    //    取数据再反序列化

 

 

 

    NSData *resultData = [NSDatadataWithContentsOfFile:documentPath];

    NSArray *resultArray = [NSKeyedUnarchiverunarchiveObjectWithData:resultData];//将数据反序列化

 

其中model同二所属,需要实现方法- (void)encodeWithCoder:(NSCoder *)aCode。- (instancetype)initWithCoder:(NSCoder *)aDecoder

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值