iOS关于model的两种写法
来源:互联网 发布:java笔试多选题 编辑:程序博客网 时间:2024/06/05 10:52
前言
今天和大家说一说model的一些问题。model相信大家都不默生,因为对于OC来说(其他语言都应该是一样的),MVC这个模式应该都是最基本的。只要用刀MVC那么你就要用到model。在我刚刚开始OC的时候,是一种写法,当自己感觉对OC有一点点自己的理解了之后,model的写法又是另一种。今天把我自己前后对于model的两种写法写出来,让大家参考一下。
Demo链接
正文
第一种model写法
一个model创建一个.m文件:代码如下(全文demo以一个简单的姓名表显示)
首先plist数据:
//姓名表的内层model,包括姓名,性别 .h声明#import <Foundation/Foundation.h>@interface SOldModel : NSObject@property(nonatomic,copy)NSString *name;//姓名@property(nonatomic,copy)NSString *sex;//性别- (instancetype)initWithDic:(NSDictionary *)dic;@end//.m实现#import "SOldModel.h"@implementation SOldModel/** * 构造 * * @param dic <#dic description#> * * @return <#return value description#> */- (instancetype)initWithDic:(NSDictionary *)dic{ self = [super init]; if (self) { [self setValuesForKeysWithDictionary:dic]; } return self;}@end
上面是一个model文件,用于接收二层数据。
下面又是一个model文件,用于接收一层数据。
//姓名表的外层model .h声明#import <Foundation/Foundation.h>@interface FOldModel : NSObject@property(nonatomic,copy)NSString *familyName;//姓氏@property(nonatomic,strong)NSArray *messageArray;//信息- (instancetype)initWithDic:(NSDictionary *)dic;@end//.m实现#import "FOldModel.h"#import "SOldModel.h"@implementation FOldModel/** * 构造 * * @param dic <#dic description#> * * @return <#return value description#> */- (instancetype)initWithDic:(NSDictionary *)dic{ self = [super init]; if (self) { [self setValuesForKeysWithDictionary:dic]; //创建一个可变数组加载soldarray NSMutableArray *soldArray = [NSMutableArray array]; for (NSDictionary *dic in self.messageArray) { SOldModel *model = [[SOldModel alloc]initWithDic:dic]; [soldArray addObject:model]; } self.messageArray = soldArray; } return self;}@end
然后在VC中显示
//.h声明#import <UIKit/UIKit.h>@interface ViewController : UIViewController@property(nonatomic,weak)UITableView *tableView;@property(nonatomic,strong)NSArray *foldArray;//数据@end//.m实现#import "ViewController.h"#import "FOldModel.h"#import "SOldModel.h"@interface ViewController ()<UITableViewDataSource,UITableViewDelegate>@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; //加载表 [self loadTableView];}- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}/** * 数据加载 */-(NSArray *)foldArray{ if (_foldArray == nil) { NSString *path = [[NSBundle mainBundle]pathForResource:@"data.plist" ofType:nil]; NSArray *oldArray = [NSArray arrayWithContentsOfFile:path]; NSMutableArray *newArray = [NSMutableArray array]; for (NSDictionary *dic in oldArray) { FOldModel *model = [[FOldModel alloc]initWithDic:dic]; [newArray addObject:model]; } _foldArray = newArray; } return _foldArray;}/** * 加载表的方法 */- (void)loadTableView{ UITableView *tableView = [[UITableView alloc]initWithFrame:self.view.bounds style:UITableViewStyleGrouped]; tableView.delegate = self; tableView.dataSource = self; [self.view addSubview:tableView]; self.tableView = tableView;}-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ return self.foldArray.count;}-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ FOldModel *fModel = self.foldArray[section]; return fModel.messageArray.count;}-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString * const ID = @"cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID]; if (cell == nil) { cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID]; } FOldModel *fModel = self.foldArray[indexPath.section]; SOldModel *sModel = fModel.messageArray[indexPath.row]; cell.textLabel.text = sModel.name; cell.detailTextLabel.text = sModel.sex; return cell;}-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{ FOldModel *fModel = self.foldArray[section]; return fModel.familyName;}@end
运行结果:
第二种model写法
所有的model在一个文件创建
//.h声明#import <Foundation/Foundation.h>//第一个model@interface NewModel : NSObject@property(nonatomic,copy)NSString *familyName;//姓氏@property(nonatomic,strong)NSArray *messageArray;//信息- (instancetype)initWithDic:(NSDictionary *)dic;@end//第二个model@interface NewModel2 : NSObject@property(nonatomic,copy)NSString *name;//姓名@property(nonatomic,copy)NSString *sex;//性别- (instancetype)initWithDic:(NSDictionary *)dic;@end//.m实现#import "NewModel.h"// 第一个model@implementation NewModel/** * 构造 * * @param dic <#dic description#> * * @return <#return value description#> */- (instancetype)initWithDic:(NSDictionary *)dic{ self = [super init]; if (self) { [self setValuesForKeysWithDictionary:dic]; //创建一个可变数组加载soldarray NSMutableArray *newArray = [NSMutableArray array]; for (NSDictionary *dic in self.messageArray) { NewModel2 *model = [[NewModel2 alloc]initWithDic:dic]; [newArray addObject:model]; } self.messageArray = newArray; } return self;}@end//第二个model@implementation NewModel2/** * 构造 * * @param dic <#dic description#> * * @return <#return value description#> */- (instancetype)initWithDic:(NSDictionary *)dic{ self = [super init]; if (self) { [self setValuesForKeysWithDictionary:dic]; } return self;}@end
大家可以看到,两个model都在同一个文件进行了声明实现。相对于第一个而言,第二种方法要简洁的很多。如果有多个model,在xcode的目录显示第二种方法要好得多。
显示数据:
//.h声明#import <UIKit/UIKit.h>@interface NewViewController : UIViewController@property(nonatomic,weak)UITableView *tableView;@property(nonatomic,strong)NSArray *foldArray;//数据@end//.m实现#import "NewViewController.h"#import "NewModel.h"@interface NewViewController ()<UITableViewDataSource,UITableViewDelegate>@end@implementation NewViewController- (void)viewDidLoad { [super viewDidLoad]; //加载表 [self loadTableView];}- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}/** * 数据加载 */-(NSArray *)foldArray{ if (_foldArray == nil) { NSString *path = [[NSBundle mainBundle]pathForResource:@"data.plist" ofType:nil]; NSArray *oldArray = [NSArray arrayWithContentsOfFile:path]; NSMutableArray *newArray = [NSMutableArray array]; for (NSDictionary *dic in oldArray) { NewModel *model = [[NewModel alloc]initWithDic:dic]; [newArray addObject:model]; } _foldArray = newArray; } return _foldArray;}/** * 加载表的方法 */- (void)loadTableView{ UITableView *tableView = [[UITableView alloc]initWithFrame:self.view.bounds style:UITableViewStyleGrouped]; tableView.delegate = self; tableView.dataSource = self; [self.view addSubview:tableView]; self.tableView = tableView;}-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ return self.foldArray.count;}-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ NewModel *fModel = self.foldArray[section]; return fModel.messageArray.count;}-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString * const ID = @"cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID]; if (cell == nil) { cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID]; } NewModel *fModel = self.foldArray[indexPath.section]; NewModel2 *sModel = fModel.messageArray[indexPath.row]; cell.textLabel.text = sModel.name; cell.detailTextLabel.text = sModel.sex; return cell;}-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{ NewModel *fModel = self.foldArray[section]; return fModel.familyName;}@end
运行结果:
结语
大家可以看到,两种方式的数据model都可以很好的显示。我自己选择的是第二种方式。
0 0
- iOS关于model的两种写法
- Model层的两种写法
- ios中单例的两种写法~~~
- 关于绑定GridView的两种写法
- iOS讲解迷惑深入浅出之单例类的两种写法
- iOS两种官方的单例模式写法
- ios :一个Label 显示两种颜色的写法
- 关于单子模式(synchronized)的两种写法
- 3、关于onclick事件的两种写法
- 关于gcd的函数和过程两种不同写法
- 两种Model的区分
- 新的model 写法
- ios 单例模式 两种写法
- 状态机的两种写法
- 状态机的两种写法
- 状态机的两种写法
- 状态机的两种写法
- 对象的两种写法
- tyvj 最长上升子序列2
- SugarCRM源码分析之SugarAutoLoader::init
- Android开发获取ImageView显示的图片尺寸
- 安卓界面跳转以及传值
- hive(1)centos下的安装与配置
- iOS关于model的两种写法
- 虚基类
- javaIO详解
- EBS Form开发 弹性域定义中的参数<三> .
- 然后对当前快照"关机",再重新启动快照的操作系统就可以了
- 语音验证码api 手机接听验证码
- 基于live555实现实时视频监控
- CSS过渡 && bootstrap transition
- 浅析动态内存分配栈与堆