Plist文件和字典转模型
模型与字典
1. 用模型取代字典的好处
- 使用字典的坏处
- 编译器没有自动提醒的功能,需要手敲
- key如果写错了编译器也不会报错
2. 模型概念
- 概念
- 专门用来
存放数据的对象
- 专门用来
- 特点
- 一般继承自NSObject
- 在.h文件中声明一些用来存放数据的属性
- 注释
- //单行注释
- / /多行注释
- /* /文档注释,调用属性时会显示出来文档注释
- 使用模型的好处
- 模型设置数据和取出数据都是通过它的属性,属性名如果写错了,编译器会马上报错,因此,保证了数据的正确性
- 使用模型访问属性的时候,编译器会提供一系列的提示,提高编码效率
3. 九空格
- 创建步骤
- 商品
- 懒加载
- 创建一个可变数组
- 获取plist的全路径
- 获取plist中的字典数据
- 将字典数组转换成模型数组
- 将模型数组添加到模型数组中
- 添加
- 总列数
- 获取当前商品的索引
- 设置商品的宽度和高度
- 设置商品的位置
- 创建一个父控件
- 将父控件添加到大的View中
- 添加一个图片
- 添加文字
- 设置数据
- 设置按钮的状态
- 删除
- 设置按钮的状态
- [self.shopsView.subviews.lastObject removeFromSuperview];//删除最后一个元素
- 商品
4. @property的使用策略
- assign
- 基本数据类型,枚举,结构体等非OC对象类型
- weak
- OC对象类型(比如NSArray,NSDate,NSNumber,模型类)
- 一般使用在UI控件上
- strong
- OC对象类型(比如NSArray,NSDate,NSNumber,模型类)
- 一个对象只要有强引用引用着,就不会被销毁
- copy
- 一般用在NSString / block上
5. 通过纯代码创建自定义控件
- 继承自系统自带的控件,写一个属于自己的控件
- 目的:封装控件内部的细节
- 步骤
- 新建一个继承
UIView的类 - 在
initWithFrame方法中添加子控件- init内部会自动调用initWithFrame方法
- 因此应该重写initWithFrame方法
- 在
layoutSubViews(子控件布局)中设置子控件的frame- 当空间的尺寸发生改变时就会调用layoutSubViews
- 一定要先调用[super layoutSubViews];
- 提供一个模型属性,重写模型属性的set方法
- 在set方法中取出模型属性,给对应的子控件赋值
- 新建一个继承
6. 通过Xib自定义控件
步骤
- 新建一个继承
UIView的类 - 新建一个
xib文件(文件名最好跟控件类名一样)- 添加子控件
- 设置子控件的属性
- 修改最外面的控件class为控件的类名
- 将子控件进行连线
- 提供模型属性,重写模型的set方法
- 在set方法中给子控件设置数据
- 新建一个继承
xib文件编译成功后就是nib文件
- 加载方式
- 方法1
如果bundle mainbundle的参数是nil,默认去mainbundle中找
NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"xib文件名" owner:nil option:nil];
方法2
UINib*nib = [UINib nibWithNibName:@"xib文件名" bundle:nil];
NSArray *views = [nib instantiateWithOwner:nil option:nil];
- 步骤
- 新建自定义控件类
- 新建Xib文件
- 修改xib中view的类名(只能修改成同类型的类)
- 封装xib的加载过程
- 拖线
- 增加模型属性,在模型属性的set方法中设置数据到子控件上
- xib和storyboard对比
- 共同点:
- 都用来描述软件界面
- 都用Interface Builder工具来编辑
- 本质都是转换成代码去创建控件
- 不同点
- Xib是轻量级的,用来描述局部的UI界面 S toryboard是重量级的,用来描述整个软件的多个界面,并且能展示多个界面之间的跳转关系
- 共同点:
6. 知识点
- 如果这个控件不是通过xib\storyboard创建,初始化时会调用initWithFrame:(CGRect)frame;
- 如果是通过xib\storyboard创建,初始化时会调用initWithCoder:(NSCoder *)aDecoder;
- 如果是通过xib\storyboard创建,初始化完毕后会调用awarkFromNib
- Xib与storyboard对比
7. 类前缀
- NS --> Next Step
- UI --> User Interface
- AV --> Audio Player
plist文件
- 一般可以使用属性列表文件存储NSArray或者NSDictionary之类的数据,这种“属性列表文件”的扩展名是plist,因此也称为“plist文件”
1.解析Plist文件
- 下来通过代码来解析Plist文件中的数据
- 获得Plist文件的全路径
NSBundle *bundle = [NSBundle mainBundle];
NSString *path = [bundle pathForResource:@"shops" ofType:@"plist"]; - 加载plist文件
objc _shops = [NSArray arrayWithContentsOfFile:path];
- 获得Plist文件的全路径
2.使用注意
plist的文件名不能叫做“info”、“Info”之类的
添加plist等文件资源的时候,一定要勾选Destination:copy items if needed/Added folders:Create groups/Add to targets:非test项目
Plist文件和字典转模型的更多相关文章
- iOS开发——UI基础-懒加载,plist文件,字典转模型,自定义view
一.懒加载 只有使用到了商品数组才会创建数组 保证数组只会被创建一次 只要能够保证数组在使用时才创建, 并且只会创建一次, 那么我们就称之为懒加载 lazy - (void)viewDidLoad 控 ...
- iOS开发——笔记篇&关于字典plist读取/字典转模型/自定义View/MVC/Xib的使用/MJExtension使用总结
关于字典plist读取/字典转模型/自定义View/MVC/Xib的使用/MJExtension使用总结 一:Plist读取 /************************************ ...
- 解析plist文件(字典里包着数组,数组中又包含字典)
#import "RootTableViewController.h" #import "City.h" @interface RootTableViewCon ...
- iOS边练边学--plist文件,懒加载,模型初使用--补充instancetype
一.什么是plist文件 1>将数据直接写在代码里面,不是一种合理的做法.如果数据经常修改,就要经常翻开对应的代码进行修改,造成代码扩展性低 2>因此,可以考虑将经常变得数据放在文件中进行 ...
- IOS开发UI基础之Plis文件-字典转模型
什么是plist文件? 在开发中直接将数据写在代码里面 不是一种合理的做法 如果数据经常改变 就需要经常翻开对应的代码进行修改 造成代码扩展性低 因此,可以考虑将经常变的数据放在⽂文件中进⾏行存储,程 ...
- 归档-对模型数组对象(存储到本地的plist文件)也数组里存放的是模型
一.模型文件 (1)JLMainViewsModel.h文件 必须遵循 NSCoding协议 @interface JLMainViewsModel : NSObject<NSCopying,N ...
- 获取保存在沙盒中plist文件的用户的字典信息
获取保存在沙盒中plist文件的用户的字典信息
- iOS-图片浏览器(字典和plist文件的使用)
// // ViewController.m // 19-图片浏览器 // // Created by hongqiangli on 2017/7/31. // Copyright © 201 ...
- plist文件、NSUserDefault 对文件进行存储的类、json格式解析
========================== 文件操作 ========================== Δ一 .plist文件 .plist文件是一个属性字典数组的一个文件: .plis ...
随机推荐
- [源码解析] PyTorch 分布式(3) ----- DataParallel(下)
[源码解析] PyTorch 分布式(3) ----- DataParallel(下) 目录 [源码解析] PyTorch 分布式(3) ----- DataParallel(下) 0x00 摘要 0 ...
- Linux usb 1. 总线简介
文章目录 1. USB 发展历史 1.1 USB 1.0/2.0 1.2 USB 3.0 1.3 速度识别 1.4 OTG 1.5 phy 总线 1.6 传输编码方式 2. 总线拓扑 2.1 Devi ...
- coding game, 边打游戏边学编程,是一种怎么样的体验?
前言 hello,大家好,我是bigsai,好久不见,甚是想念! 在日常生活中,很多人喜欢玩游戏,因为游戏中有着对抗博弈.控制的喜悦,用灵魂指法完成一波靓丽的操作. 但实际上,你的按键都是对应代码中一 ...
- 系统调用篇——SSDT
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...
- react之redux状态管理
1.传统MVC框架的缺陷 模型(model)-视图(view)-控制器(controller)的缩写 V即View视图:用户看到并与之交互的界面. M即Model模型是管理数据:很多业务逻辑都在模型中 ...
- 说下我费了几个钟头才搞定的myeclipse和tomcat问题
配置myeclipse与tomcat的时候,我根本没有想到myeclipse已经集成了tomcat,根据我上篇文章可以找到所集成的tomcat的位置.于是,自己下了一个tomcat,也许是自作聪明吧, ...
- [loj6278]数列分块入门2
做法1 以$K$为块大小分块,并对每一个块再维护一个排序后的结果,预处理复杂度为$o(n\log K )$ 区间修改时将整块打上标记,散块暴力修改并归并排序,单次复杂度为$o(\frac{n}{K}+ ...
- vue 3 学习笔记 (八)——provide 和 inject 用法及原理
在父子组件传递数据时,通常使用的是 props 和 emit,父传子时,使用的是 props,如果是父组件传孙组件时,就需要先传给子组件,子组件再传给孙组件,如果多个子组件或多个孙组件使用时,就需要传 ...
- SpringCloud微服务实战——搭建企业级开发框架(二十三):Gateway+OAuth2+JWT实现微服务统一认证授权
OAuth2是一个关于授权的开放标准,核心思路是通过各类认证手段(具体什么手段OAuth2不关心)认证用户身份,并颁发token(令牌),使得第三方应用可以使用该token(令牌)在限定时间.限定 ...
- Sentry 监控 - Snuba 数据中台架构(SnQL 查询语言简介)
本文描述了 Snuba 查询语言 (SnQL). 系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒 ...