使用MJExtension进行字典模型转换

本文介绍了如何在Objective-C中利用MJExtension库进行字典到模型的转换,包括处理键值不对应的情况、时间戳转换以及模型在NSUserdefaults中的存储。同时讲解了当模型中包含数组模型时的转换方法。

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

第一步: pod 'MJExtension'

第二步:#import <MJExtension/MJExtension.h>

第三步:如果返回的字典中的key与model中的属性不对应在model的.m文件中加入以下代码

+(NSDictionary *)mj_replacedKeyFromPropertyName
{
    return @{
        @"userId" : @"id",
    };
}

第四步:如果要处理字典中的返回值,在model的.m文件中实现对应属性的set方法,如下:要把服务器返回的时间戳毫秒改为妙

-(void)setCreateDate:(NSTimeInterval)createDate
{
    _createDate = createDate/100;
}

第五部:如果要把自己创建的model存储到本地的NSUserdefaults中,要在mode的.m文件的顶部 加上MJCodingImplementation 

@implementation UserMessage
//存储到本地的时候需要编码解码
MJCodingImplementation
如果返回的字典中的key与model中的属性不对应在model的.m文件中加入以下代码
+(NSDictionary *)mj_replacedKeyFromPropertyName
{
    return @{
        @"userId" : @"id",
    };
}
//如果要处理字典中的返回值,在model的.m文件中实现对应属性的set方法,如下:要把服务器返回的时间戳毫秒改为妙
-(void)setCreateDate:(NSTimeInterval)createDate
{
    _createDate = createDate/100;
}

总结:

以下代码实现了字典模型转换和model在NSUserdefaults中的存取

//dic是后端返回的NSDictionaty
 UserMessage * userMessage = [UserMessage mj_objectWithKeyValues:dic];
//存储model对象到本地
 [Common saveArchiveObj:userMessage fileName:@“存储的字符串”];
//从本地读取model
[Common readArchiveObjWithfileName:@“存储字符串”];
//从本地删除model
[Common deleteArchiveObjWithfileName:@“存储字符串”];

//下面是存储,获取,删除的实现
+ (void)saveArchiveObj:(id)archiveObj fileName:(NSString *)fileName {
    
    if ([archiveObj isKindOfClass:[NSNull class]] || !fileName || [fileName isEqualToString:@""]) return;
    [NSKeyedArchiver archiveRootObject:archiveObj toFile:[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:fileName]];
}

+ (id)readArchiveObjWithfileName:(NSString *)fileName {
    return (fileName && ![fileName isEqualToString:@""]) ? [NSKeyedUnarchiver unarchiveObjectWithFile:[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:fileName]] : nil;
}
+ (void)deleteArchiveObjWithfileName:(NSString *)fileName {
    if (!fileName || [fileName isEqualToString:@""]) return;
    NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:fileName];
    NSFileManager *fileMgr = [NSFileManager defaultManager];
    [fileMgr removeItemAtPath:filePath error:nil];
}

、、、、、、、、、、、、、、、、、、、、、、、、、、

如果model中包含一个数组,这个数组里边存放的是另外一个model

比如TopicModel中包含一个CommentModel的数组

1、TopicModel的.h文件中有评论数组commentArray

@property(nonatomic,strong)NSArray * commentArray;

2、在TopicModel的.m文件中添加如下代码

+ (NSDictionary *)mj_objectClassInArray

{

    return @{@"commentArray": @"CommentModel"};

}

将字典数组转成model数组  mj_objectArrayWithKeyValuesArray

eg:

    NSArray * modelArray= [TopicModel mj_objectArrayWithKeyValuesArray:@[dic,dic]];

将model数组转成字典数组 mj_keyValuesArrayWithObjectArray

eg:

    NSArray * dicArray = [TopicModel mj_keyValuesArrayWithObjectArray:@[model,model]];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

义中

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值