此篇文章主要讲述获取服务器JSON接口数据,以便大家在今后的物联网信息时代,移动数据肯定都是需要网络数据的,那么就需要用一个分布集中,整体化的,规范性的创建所需的文件,
          此篇文章主要讲述获取服务器JSON接口数据,以便大家在今后的物联网信息时代,移动数据肯定都是需要网络数据的,那么就需要用一个分布集中,整体化的,规范性的创建所需的文件,同时方便以后维护;
分别为:M(model),M(manager),V(view),C(cell),C(controller);
具体程序如下:
一:YSMasonryManager.h
#import <Foundation/Foundation.h> #import "BaseManager.h" #import "YSMasonryModel.h" @protocol YSMasonryManagerDelegate <NSObject> -(void)networkSuccess:(YSMasonryModel *_Nullable)result; -(void)networkFail:(NSString *_Nullable)result; @end NS_ASSUME_NONNULL_BEGIN @interface YSMasonryManager : BaseManager @property(weak,nonatomic) id<YSMasonryManagerDelegate> delegate; -(void)getDeviceProile:(NSString *)limit Offset:(NSString *)offset; @end NS_ASSUME_NONNULL_END
二:YSMasonryManager.m
#import "YSMasonryManager.h"
@implementation YSMasonryManager
-(void)getDeviceProile:(NSString *)limit Offset:(NSString *)offset{
  
  NSString *strUrl = [NSString stringWithFormat:@"%@api/internal/profile",DEVICE_BASE_URL];
  
  //JSON 
  [PPNetworkHelper setRequestSerializer:PPRequestSerializerHTTP];
  [PPNetworkHelper setResponseSerializer:PPResponseSerializerJSON];
  //配置Jwt文件
  [PPNetworkHelper setValue:USERJWTKEYS forHTTPHeaderField:@"Grpc-Metadata-Authorization"];
  
  [PPNetworkHelper GET:strUrl parameters:@"" success:^(id responseObject){
    YSMasonryModel *net = [YSMasonryModel mj_objectWithKeyValues:responseObject];
    if(net.organizations.count>0){
      if([self.delegate respondsToSelector:@selector(networkSuccess:)]){
        [self.delegate networkSuccess:net];
      }
    }else{
      if([self.delegate respondsToSelector:@selector(networkFail:)]){
        [self.delegate networkFail:@"Get Fail!"];
      }
    }
    
  } failure:^(NSError *error){
    // NSError *newError = [NSError returnErrorWithError:error];
    if([self.delegate respondsToSelector:@selector(networkFail:)]){
      [self.delegate networkFail:@"cc"];
    }
  }];
}
@end
分析:
#import "BaseManager.h"//头部manager对象 #import "YSMasonryModel.h"//模型层
三:YSMasonryModel.h
#import <Foundation/Foundation.h> #import "BaseModel.h" #import "YSMasonryPileModel.h" NS_ASSUME_NONNULL_BEGIN @interface YSMasonryModel : BaseModel @property(nonatomic, copy) NSString *settings; @property(nonatomic, copy) NSArray *organizations; @property(nonatomic, copy) NSString *user; +(NSDictionary*)mj_objectClassInArray; @end NS_ASSUME_NONNULL_END
四:YSMasonryModel.m
#import "YSMasonryModel.h"
@implementation YSMasonryModel
+(NSDictionary*)mj_objectClassInArray{
  return @{@"organizations":[YSMasonryPileModel class],};
}
@end
五:YSMasonryPileModel.h
#import <Foundation/Foundation.h> #import "BaseModel.h" NS_ASSUME_NONNULL_BEGIN @interface YSMasonryPileModel : BaseModel @property(nonatomic,assign) NSString *isAdmin; @property(nonatomic, copy) NSString *organizationID; @property(nonatomic, copy) NSString *organizationName; @property(nonatomic, copy) NSString *createdAt; @property(nonatomic, copy) NSString *updatedAt; @property(nonatomic,assign) NSString *disableAssignExistingUsers; @property(nonatomic, copy) NSString *email; @property(nonatomic, copy) NSString *uid; @property(nonatomic,assign) NSString *isActive; @property(nonatomic, copy) NSString *note; @property(nonatomic,assign) NSString *sessionTTL; @property(nonatomic, copy) NSString *username; -(id)initWithDict:(NSDictionary*)dict; @end NS_ASSUME_NONNULL_END
六:YSMasonryPileModel.m
#import "YSMasonryPileModel.h"
@implementation YSMasonryPileModel
+ (NSDictionary *)mj_replacedKeyFromPropertyName
{
  return @{@"uid": @"uid"};
}
-(id)initWithDict:(NSDictionary*)dict{
  if(self = [super init]){
    self.createdAt = dict[@"createdAt"];
    //@"gatewayDiscoveryEnabled":@(enable),
    self.isAdmin = dict[@"isAdmin"];
    self.organizationID = dict[@"organizationID"];
    self.organizationName = dict[@"networkServerID"];
    self.updatedAt = dict[@"updatedAt"];
    
     self.disableAssignExistingUsers = dict[@"disableAssignExistingUsers"];
    
    self.email = dict[@"email"];
    self.uid = dict[@"id"];
    self.isActive = dict[@"isActive"];
    self.note = dict[@"note"];
    self.sessionTTL = dict[@"sessionTTL"];
    self.username = dict[@"username"];
  }
  return self;
}
@end
七:YSMasonryView.h
#import <UIKit/UIKit.h> #import "BaseView.h" NS_ASSUME_NONNULL_BEGIN @interface YSMasonryView : BaseView @property(nonatomic,strong) UITableView *mDevericePile; @end NS_ASSUME_NONNULL_END
八:YSMasonryView.m
#import <Foundation/Foundation.h>
#import "YSMasonryView.h"
#ifdef __OBJC__
//define this constant if you want to use Masonry without the 'mas_' prefix
#define MAS_SHORTHAND
//define this constant if you want to enable auto-boxing for default syntax
#define MAS_SHORTHAND_GLOBALS
#import "Masonry.h"
#endif
@implementation YSMasonryView
-(void)initView{
  
  _mDevericePile = [[UITableView alloc] init];
  _mDevericePile.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
  [self addSubview:_mDevericePile];
  
  [_mDevericePile makeConstraints:^(MASConstraintMaker *make) {
    make.top.equalTo(self).offset(0);
    make.left.equalTo(self).offset(0);
    make.right.equalTo(self).offset(0);
    make.bottom.equalTo(self).offset(0);
  }];
}
@end
九:YSMasonryCell.h
#import <UIKit/UIKit.h> #import "BaseCell.h" NS_ASSUME_NONNULL_BEGIN @interface YSMasonryCell : BaseCell @property(nonatomic, strong) UIImageView *mNetImgVw; @property(nonatomic, strong) UILabel *mNetNameLb; @property(nonatomic, strong) UILabel *mNetServerLb; @property(nonatomic, strong) UILabel *mNetTimeLb; @end NS_ASSUME_NONNULL_END
十:YSMasonryCell.m
#import "YSMasonryCell.h"
@implementation YSMasonryCell
- (void)awakeFromNib {
  [super awakeFromNib];
}
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
  self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
  if(self){
    UIView *mainView = [[UIView alloc] init];
    mainView.layer.cornerRadius = 8;
    mainView.layer.borderColor = [[UIColor grayColor] CGColor];
    mainView.layer.borderWidth = 1;
    [self addSubview:mainView];
    
    [mainView makeConstraints:^(MASConstraintMaker *make){
      make.left.equalTo(self).offset(10);
      make.right.equalTo(self).offset(-10);
      make.top.equalTo(self).offset(10);
      make.bottom.equalTo(self).offset(-10);
    }];
    
    _mNetImgVw = [[UIImageView alloc] init];
    [mainView addSubview:_mNetImgVw];
    
    [_mNetImgVw makeConstraints:^(MASConstraintMaker *make){
      make.centerY.equalTo(self);
      make.left.equalTo(self).offset(20);
      make.width.equalTo(@25);
      make.height.equalTo(@25);
    }];
    
    //Net名称
    _mNetNameLb = [[UILabel alloc] init];
    _mNetNameLb.textColor = [UIColor grayColor];
    _mNetNameLb.font = [UIFont fontWithName:@"Helvetica-Bold" size:16];
    _mNetNameLb.textAlignment = NSTextAlignmentLeft;
    [mainView addSubview:_mNetNameLb];
    
    [_mNetNameLb makeConstraints:^(MASConstraintMaker *make){
      make.top.equalTo(mainView).offset(5);
      make.left.equalTo(self.mNetImgVw).offset(35);
      make.right.equalTo(mainView).offset(-5);
      make.height.equalTo(@30);
    }];
    
    //创建时间
    _mNetTimeLb = [[UILabel alloc] init];
    _mNetTimeLb.textColor = [UIColor grayColor];
    _mNetTimeLb.font = [UIFont fontWithName:@"Helvetica-Bold" size:14];
    _mNetTimeLb.textAlignment = NSTextAlignmentRight;
    [mainView addSubview:_mNetTimeLb];
    
    [_mNetTimeLb makeConstraints:^(MASConstraintMaker *make){
      make.top.equalTo(mainView).offset(10);
      make.right.equalTo(mainView).offset(-10);
      make.width.equalTo(@160);
      make.height.equalTo(@30);
    }];
    
    //端口号
    _mNetServerLb = [[UILabel alloc] init];
    _mNetServerLb.textColor = [UIColor grayColor];
    _mNetServerLb.font = [UIFont fontWithName:@"Helvetica-Bold" size:16];
    _mNetServerLb.textAlignment = NSTextAlignmentLeft;
    [mainView addSubview:_mNetServerLb];
    
    [_mNetServerLb makeConstraints:^(MASConstraintMaker *make){
      make.bottom.equalTo(self).offset(-15);
      make.left.equalTo(self.mNetImgVw).offset(35);
      make.right.equalTo(mainView).offset(-10);
      make.height.equalTo(@30);
    }];
  }
  return self;
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
  [super setSelected:selected animated:animated];
}
@end
十一:YSMasonryContller.h
#import <UIKit/UIKit.h> #import "BaseViewController.h" #import "YSMasonryView.h" #import "YSMasonryCell.h" #import "YSMasonryManager.h" #import "YSMasonryPileModel.h" #import "MBProgressHUD.h" #import "MJRefresh.h" #import "WHToast.h" NS_ASSUME_NONNULL_BEGIN @interface YSMasonryContller : BaseViewController @property(nonatomic,strong) YSMasonryView *lgdView; @property(nonatomic, strong) YSMasonryManager *lgdManager; @property(strong, nonatomic) NSMutableArray *dataList; @property (strong,nonatomic) MBProgressHUD *hud; @property(nonatomic, strong) YSMasonryPileModel *model; @property(nonatomic, strong) NSString *organizations; @property(assign,nonatomic) int limit; @property(assign,nonatomic) int offsert; @end NS_ASSUME_NONNULL_END
十二:YSMasonryContller.m
#import <Foundation/Foundation.h>
#import "YSMasonryContller.h"
#define CELLIDENTIFITER "NETTABLEVIEWCELL"
@interface YSMasonryContller()<YSMasonryManagerDelegate,UITableViewDataSource, UITableViewDelegate,UITextFieldDelegate>
@end
@implementation YSMasonryContller
- (void)viewDidLoad {
  [super viewDidLoad];
  [self initData];
  
}
//头部标题a
- (void)customContentView{
  UIColor *commonBlue = [self.commonUtil stringToColor:@"#333333"];
  [self.navigationController.navigationBar setBarTintColor:commonBlue];
  self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
  self.navigationItem.title = @"NetWork Server";
}
- (void)customNavigationLeftItem{
  UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
  self.navigationItem.backBarButtonItem = item;
}
-(void)customNavigationRightItem{
  UIBarButtonItem *add = [[UIBarButtonItem alloc] initWithTitle:@"Add" style:UIBarButtonItemStylePlain target:self action:@selector(onAddClick)];
  add.tintColor = [UIColor whiteColor];
  self.navigationItem.rightBarButtonItem = add;
}
-(void)initData{
  UIView *view = [[UIView alloc] init];
  self.lgdView.mDevericePile.tableFooterView = view;
  
  self.lgdView.frame = self.view.bounds;
  [self.view addSubview:self.lgdView];
  
  _limit = 5;
  _offsert = 0;
  
}
//启动时的运行数据
- (void)viewDidAppear:(BOOL)animated{
  [super viewDidAppear:animated];
  //加载数据
  NSString *slimit = [NSString stringWithFormat:@"%d",_limit];
  NSString *soffset = [NSString stringWithFormat:@"%d",_offsert];
  [self.lgdManager getDeviceProile:slimit Offset:soffset];
}
-(YSMasonryView*)lgdView{
  if(_lgdView==nil){
    _lgdView = [[YSMasonryView alloc] init];
    _lgdView.mDevericePile.dataSource = (id)self;
    _lgdView.mDevericePile.delegate = (id)self;
  }
  return _lgdView;
}
-(YSMasonryManager*)lgdManager{
  if(_lgdManager==nil){
    _lgdManager = [[YSMasonryManager alloc] init];
    _lgdManager.delegate = (id)self;
  }
  return _lgdManager;
}
-(NSMutableArray*)dataList{
  if(_dataList==nil){
    _dataList = [NSMutableArray array];
  }
  return _dataList;
}
#pragma mark get network data
-(void)networkSuccess:(YSMasonryModel *_Nullable)result{
  [self.lgdView.mDevericePile.mj_header endRefreshing];
  [self.lgdView.mDevericePile.mj_footer endRefreshing];
  self.dataList = [NSMutableArray arrayWithArray:result.organizations];
  [self.lgdView.mDevericePile reloadData];
}
-(void)networkFail:(NSString *_Nullable)result{
  [self.lgdView.mDevericePile.mj_header endRefreshing];
  [self.lgdView.mDevericePile.mj_footer endRefreshing];
  [WHToast showMessage:result originY:500 duration:2 finishHandler:^{
  }];
}
#pragma mark tableView
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
  return self.dataList.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  
  YSMasonryCell *cell = [tableView dequeueReusableCellWithIdentifier:@CELLIDENTIFITER];
  
  if(cell==nil){
    cell = [[YSMasonryCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@CELLIDENTIFITER];
  }
  
  if(_dataList.count>0){
    YSMasonryPileModel *model = [[YSMasonryPileModel alloc] initWithDict:[self.dataList objectAtIndex:indexPath.row]];
    if(model!=nil){
      //cell.mNetImgVw.image = [UIImage imageNamed:@"net"];
      // cell.mNetNameLb.text = model.isAdmin;
      // cell.mNetTimeLb.text = [self dateAndStrings:model.createdAt];
      cell.mNetServerLb.text = @"vv";
    }
  }
  return cell;
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
  if(_dataList.count>0){
    YSMasonryPileModel *model = [[YSMasonryPileModel alloc] initWithDict:[self.dataList objectAtIndex:indexPath.row]];
    
    if(model!=nil){
      // [self updateNetWorkServer:model.deviceprolieid];
    }
  }
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
  return 100;
}
-(NSString*)dateAndStrings:(NSString*)date{
  if(date!=nil){
    NSArray *strtime = [date componentsSeparatedByString:@"T"];
    //NSString *strtime = [date stringByReplacingOccurrencesOfString:@"T" withString:@" "];
    return strtime[0];
  }
  return @"None";
}
//添加add设备
-(void)onAddClick{
}
@end
十三:所用到的常量一些定义:
Constants.h
#import <Foundation/Foundation.h> #define BASE_URL @"http://110.22.33/ilLoRaWan/" #define USERJWTKEYS @"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJsb3JhLWFwcC1zZXJ2ZXIiLCJhdWQiOiJsb3JhLWFwc"
至此!
以上详细的代码,主要就是mode数据层那,修改自己的json的返回数据,与一些字典类型的转换,就没其他的难点了。这样写的主要目的是,思路逻辑更清晰,后期维护也简单,分开着写代码更简洁。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。
