现在一般客户端和服务器相互基本都用json,关键的一步是客户端本地model和json的转化,如果用ios自带的api估计要累死。
试了很多别的插件后,最终选定realm-json ,这是基于realm的一个扩展插件 , realm是个好东西,上官网看看就知了。
real-json插件的github地址 :https://github.com/matthewcheok/Realm-JSON
首先pod
pod 'Realm'
pod 'Realm+JSON', '~> 0.2'
cd到目录下
pod install –verbose –no-repo-update
首次install的时候尽量翻墙
创建Model
创建realm自己的 model文件(参见realm官网安装插件)
然后输入model字段:
//userinfo.h
#import <Realm/Realm.h>
@interface userinfo : RLMObject
@property NSString* userId;
@property NSString * userName ;
@end
// This protocol enables typed collections. i.e.:
// RLMArray<userinfo>
RLM_ARRAY_TYPE(userinfo)
m文件 :
#import "userinfo.h"
@implementation userinfo
// Specify default values for properties
//+ (NSDictionary *)defaultPropertyValues
//{
// return @{};
//}
// Specify properties to ignore (Realm won't persist these)
//+ (NSArray *)ignoredProperties
//{
// return @[];
//}
+ (NSDictionary *)JSONInboundMappingDictionary {
return @{
@"name": @"userName",
@"id": @"userId"
};
}
+(NSString*)primaryKey{
return @"userId";
}
@end
格式参见 realm官方文档
其中JSONInboundMappingDictionary
用来定义 json传入字段和本地model转化格式 ,比如json中的name 转化为本地userName , 如果没有这个函数则默认用驼峰格式 ,也就是本地如果是userName,那么json中必须是user_name,否则将无法获取数据。
转化
//查看app所属default.realm数据库文件路径
NSLog(@"%@",[[RLMRealm defaultRealm] path]);
RLMRealm *realm = [RLMRealm defaultRealm];
[realm beginWriteTransaction];
userinfo* res= [userinfo createOrUpdateInRealm:realm withJSONDictionary:@{@"id":@"1",@"name":@"tyrant"}];
[realm commitWriteTransaction];
上面是简单的单条数据 ,多条数据:
NSArray *result = [MCEpisode createOrUpdateInRealm:realm withJSONArray:array];
以上仅是最简单使用,更多用法参见realm和realm-json自带demo
附一个简单 demo:
https://github.com/tyrantkemp/realm_demo.git