一个留着自己看的json模版

json请求,回包处理,解析,缓存,发出通知刷新界面

#头文件

#import <Foundation/Foundation.h>
#import "ServerJsonPackage.h"
#import "MJExtension.h"


#define kPrivilegeOperateInfoJson    @"kPrivilegeOperateInfoJson"
#define kPrivilegeOperateInfoJsonFinish    @"kPrivilegeOperateInfoJsonFinish"
#define PrivilegeOperateInfoJson_PACKAGE ((PrivilegeOperateInfoJson *)[ServerJsonPackage getPackage:kPrivilegeOperateInfoJson])
//json请求的数据模型
@interface PrivilegeOperateInfoModel : NSObject

@property (nonatomic, assign)  NSInteger ID;
@property (nonatomic, strong)  NSString *name;
@property (nonatomic, assign)  NSInteger value;
//通过字典获取模型
+(instancetype) PrivilegeOperateInfoModelWithDict:(NSDictionary *) dict;
//通过字典数组获取模型数组
+(NSArray *) PrivilegeOperateInfoModelWithDataArray:(NSArray*) data;
@end


//json请求包
@interface PrivilegeOperateInfoJson : EasyServerJsonPackage
//注册json包,把这个类的一个对象以字典形式存入框架的json的proxy中,让宏PrivilegeOperateInfoJson_PACKAGE可以直接拿到这个json包的对象
//这个json包不是单利,每次通过这个宏获取对象,都是一个对象,相当于单例
+ (void)registerPackage;
//json包对外提供的方法,通过权限ID获取权限模型
-(PrivilegeOperateInfoModel *)getInfoModelWithId:(int)privilegeId;

@end



json请求,回包处理,解析,缓存,发出通知刷新界面

#点m文件

#import "PrivilegeOperateInfoJson.h"
#import "PPClient.h"
#import "Observer.h"
#import "ServerJsonPackage.h"
#import "ServerJsonPackageHolder.h"
#import "ServerField.h"
#import "ITalkOldUrlConfig.h"
#import "NSDataDisk.h"
#import "SimpleAPI.h"
//model解析

#import "MJExtension.h"

@implementation PrivilegeOperateInfoModel

+(instancetype) PrivilegeOperateInfoModelWithDict:(NSDictionary *) dict
{
    return [PrivilegeOperateInfoModel objectWithKeyValues:dict];
}
+(NSArray *) PrivilegeOperateInfoModelWithDataArray:(NSArray*) data
{
    return [PrivilegeOperateInfoModel objectArrayWithKeyValuesArray:data];
}
- (NSDictionary *)replacedKeyFromPropertyName{
    return @{
             @"ID":@"id"
             };

}
//用以归档的方法
- (void)encodeWithCoder:(NSCoder *)aCoder{
    [aCoder encodeInteger:self.ID forKey:@"ID"];
    [aCoder encodeObject:self.name forKey:@"name"];
    [aCoder encodeInteger:self.value forKey:@"value"];
    
}
//用以归档的方法
- (id)initWithCoder:(NSCoder *)aDecoder{
    if (self = [super init]) {
        self.ID              = [aDecoder decodeIntForKey:@"ID"];
        self.name            = [aDecoder decodeObjectForKey:@"name"];
        self.value           = [aDecoder decodeIntForKey:@"value"];
    }
    return self;
}
@end

@implementation PrivilegeOperateInfoJson
{
    NSMutableArray * privilegeOperateInfoModelArr;
    NSTimeInterval _mUpdateTimeInterval;
    bool _haveLoad;
}


+ (void)registerPackage
{
    if (![SERVER_JSON_HOLDER getJsonPackage:kPrivilegeOperateInfoJson])
    {
        PrivilegeOperateInfoJson * jsonPackage = (PrivilegeOperateInfoJson *)[PrivilegeOperateInfoJson withDelegate:nil andJsonType:TYPE_SERVER_JSON_PACKAGE_DICTIONARY];
        [SERVER_JSON_HOLDER registerJsonPackage:kPrivilegeOperateInfoJson withObject:jsonPackage];
    }
}



-(void)onSetPostData:(id)_httpRequestObject objectType:(NSString*)szType
{
    
}

-(ServerJsonRequestType)requestType
{
    return SERVER_JSON_REQUEST_TYPE_GET;
}

//返回是否能够发出请求
-(BOOL)canRequest
{
    NSTimeInterval nowTime = [[NSDate date] timeIntervalSince1970];
    if(nowTime - _mUpdateTimeInterval >10*60){
        return YES;
    }
    return NO;
   
}

-(NSString*)getHttpString
{
    return PrivilegeOperateInfoJsonUrl;
}

-(void)onRecvServerData:(id)_data withState:(NSInteger)kState
{
    if (!_data)
    {
        ITLogSP(@"%@",@"data is nil");
        return;
    }
    //mj直接转换为数组---练习代码>>>>>
    NSArray * ppdataArr = [PrivilegeOperateInfoModel PrivilegeOperateInfoModelWithDataArray:_data];
    //<<<<<<<<<<<<<<<<<练习代码
    //mj字典转模型>>>>>>>
    if (nil == privilegeOperateInfoModelArr) {
        privilegeOperateInfoModelArr = [NSMutableArray array];
    }
    NSArray *dataArr = _data;
    if (dataArr &&[dataArr isKindOfClass:[NSArray class]]) {
        
        //将现在时间存入userdefaults
        _mUpdateTimeInterval = [[NSDate date] timeIntervalSince1970];
        [NSUserDefaults setObject:@(_mUpdateTimeInterval) forKey:@"kPrivilegeOperateInfoJsonTime"];
        [NSUserDefaults synchronize];
        
        //将字典转换成模型存入数组privilegeOperateInfoModelArr
        [privilegeOperateInfoModelArr removeAllObjects];
        for (int i=0; i<dataArr.count; i++) {
            NSDictionary *dict = dataArr[i];
            PrivilegeOperateInfoModel * infoModel = [[PrivilegeOperateInfoModel alloc] init];
            infoModel = [PrivilegeOperateInfoModel PrivilegeOperateInfoModelWithDict:dict];
            [privilegeOperateInfoModelArr addObject:infoModel];
        }
    }
    //<<<<<<<<<<mj字典转模型
    
    //归档
    [self saveDataToDisk];
    //数据接收完成发出通知让view重新获取真正数据
    [[NSNotificationCenter defaultCenter] postNotificationName:kPrivilegeOperateInfoJsonFinish object:nil];
}
//获取数据的方法
-(PrivilegeOperateInfoModel *)getInfoModelWithId:(int)privilegeId
{
    //先加载本地数据
    [self loadDiskData];
    //请求json,这里通过canRequest控制是否发送请求
    [self request];
    //请求完数据将数据筛选,拿出需要id的模型并返回
    for(int i=0;i<privilegeOperateInfoModelArr.count;i++)
    {
        PrivilegeOperateInfoModel *infoModel =privilegeOperateInfoModelArr[i];
        if(privilegeId == infoModel.ID)
        {
            return infoModel;
        }
    }
    
    return nil;
}

//归档数据
- (void)saveDataToDisk
{
  
    NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
    //将数组放入字典
    if (privilegeOperateInfoModelArr){
        [dic setObject:privilegeOperateInfoModelArr forKey:@"dataArray"];
    }
    //将字典归档,进行缓存
    NSDataDisk *disk = [NSDataDisk withFolderName:[SimpleAPI getJsonSaveFolderName]];
    [disk save2disk:self.name withObject:dic];
}

//读取本地数据
- (void)loadDiskData
{
    //如果时间为nil,获取userdefaults里缓存的上次下载时间
    if (_mUpdateTimeInterval <=0 ){
        _mUpdateTimeInterval = [[NSUserDefaults objectForKey:@"kPrivilegeOperateInfoJsonTime"] unsignedLongLongValue];
        
    }
    //数组没有被创建,创建数组
    if (privilegeOperateInfoModelArr == nil){
        privilegeOperateInfoModelArr = [[NSMutableArray alloc] init];
    }
    //从归档中拿出数据,,haveload保证只从本地加载一次
    if(privilegeOperateInfoModelArr.count <= 0 && _haveLoad == NO)
    {
        NSDataDisk *disk           = [NSDataDisk withFolderName:[SimpleAPI getJsonSaveFolderName]];
        NSDictionary *dic          = [disk loadFromDisk:self.name];
        NSArray *arr =  [dic objectForKey:@"dataArray"];
        if (arr && [arr isKindOfClass:[NSArray class]]){
            [privilegeOperateInfoModelArr removeAllObjects];
            [privilegeOperateInfoModelArr addObjectsFromArray:arr];
        }
        _haveLoad = YES;
    }
}
@end


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值