Realm(RLMObject)的解析

Objective‑C版本的 Realm 能够让您以一种安全、耐用以及迅捷的方式来高效地编写应用的数据模型层!

最近在项目中用到了Realm框架进行数据存储,在这里和大家分享一下在运用中遇到的问题!

RLMObject 解析

相信很多朋友会遇到,用MJExtension等解析框架解析不了继承于RLMObject的对象,其实这主要是继承于RLMObject的对象 获取的类名方法不一样了;

平时我们也许是这样获取一个对象的类名的:

[object class];

但是如果继承于RLMObject的对象也用这个方法获取类的话,就不行了,例如:

#import <Realm/Realm.h>
#import "HDDog.h"

@interface HDUser : RLMObject

@property NSString *userid;

@property NSString *user_name;

@property RLMArray <HDDog*><HDDog>*dogs;

@end
HDUser *user = [[HDUser alloc]init];
user.userid = @"2";
user.user_name = @"解析";

NSLog(@"%@",[user class]);

打印结果为:

5B5225AC-FD19-4C20-9471-03495695BEEA.png

那么我们要用什么方法去获取类名呢?
其实RLMObject提供了一个方法给我们去获取这个对象的类名;


50DEB754-43B3-4679-B672-76370F2A008D.png

因此我们可以这样获取:

NSLog(@"%@",[[user class] className]);

打印结果为:


7E46792F-F44A-4D43-8A2E-739A27943D4B.png

最后我们可以通过runtime解析

#import "RLMObject+HDJson.h"
#import <objc/runtime.h>


@implementation RLMObject (HDJson)

#pragma mark -模型转字典
-(NSMutableDictionary*)hd_keyValues{
    
    
    NSMutableDictionary *propertyDic = [NSMutableDictionary dictionaryWithCapacity:0];
    unsigned int outCount;
    
    
    //获取对象的属性列表
    objc_property_t *properties = class_copyPropertyList(NSClassFromString([[self class] className]), &outCount);

    for (int i = 0; i < outCount; i++) {
 
        NSString *name = [NSString stringWithCString:property_getName(properties[i]) encoding:NSUTF8StringEncoding];
  
        id value = [self valueForKey:name];

        if (value) {
            
            
            if ([value isKindOfClass:[RLMArray class]]) {//判断是否是数组
                
                //模型数组转字典数组成
               [propertyDic setObject:[self hd_keyValuesArrayWithObjectArray:value] forKey:name];
                
            }else{
                
               [propertyDic setObject:value forKey:name];
                
            }

        }
    }
    free(properties);

    
    return propertyDic;
}



#pragma mark - 模型数组 -> 字典数组
-(NSMutableArray*)hd_keyValuesArrayWithObjectArray:(NSArray *)objectArray{
    
    NSMutableArray *array = [[NSMutableArray alloc]init];
    
    for (RLMObject *obje in objectArray) {
        
        [array addObject:obje.hd_keyValues];

    }
    
    return array;
    
}

如果有需要可以下载demo: https://github.com/LiuHengye/RealmJson

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 由于最近项目中在用Realm,所以把自己实践过程中的一些心得总结分享一下。 Realm是由Y Combina...
    一缕殇流化隐半边冰霜阅读 74,018评论 213 517
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,095评论 25 709
  • 胡诌小诗来留言, 情真何须绝七言。 倒挂三天无墨水, 幸福虽小心里甜。 回复 幽默小诗来留言, 无需严谨绝七言。 ...
    荷静阅读 3,262评论 10 29
  • 最佳女主的颁奖人桂纶镁:说话慢条斯理;冯小刚很幽默。两位女 主周冬雨和马思纯虽然颁奖的时候说话比较率性,但是不算非...
    木字旁和小字阅读 1,477评论 0 0

友情链接更多精彩内容