当前位置: 首页 > 工具软件 > MJExtension > 使用案例 >

使用MJExtension进行字典模型转换

易书
2023-12-01

第一步: 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]];

 类似资料: