模型与字典

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];

2.使用注意

  • plist的文件名不能叫做“info”、“Info”之类的

  • 添加plist等文件资源的时候,一定要勾选Destination:copy items if needed/Added folders:Create groups/Add to targets:非test项目

Plist文件和字典转模型的更多相关文章

  1. iOS开发——UI基础-懒加载,plist文件,字典转模型,自定义view

    一.懒加载 只有使用到了商品数组才会创建数组 保证数组只会被创建一次 只要能够保证数组在使用时才创建, 并且只会创建一次, 那么我们就称之为懒加载 lazy - (void)viewDidLoad 控 ...

  2. iOS开发——笔记篇&关于字典plist读取/字典转模型/自定义View/MVC/Xib的使用/MJExtension使用总结

    关于字典plist读取/字典转模型/自定义View/MVC/Xib的使用/MJExtension使用总结 一:Plist读取 /************************************ ...

  3. 解析plist文件(字典里包着数组,数组中又包含字典)

    #import "RootTableViewController.h" #import "City.h" @interface RootTableViewCon ...

  4. iOS边练边学--plist文件,懒加载,模型初使用--补充instancetype

    一.什么是plist文件 1>将数据直接写在代码里面,不是一种合理的做法.如果数据经常修改,就要经常翻开对应的代码进行修改,造成代码扩展性低 2>因此,可以考虑将经常变得数据放在文件中进行 ...

  5. IOS开发UI基础之Plis文件-字典转模型

    什么是plist文件? 在开发中直接将数据写在代码里面 不是一种合理的做法 如果数据经常改变 就需要经常翻开对应的代码进行修改 造成代码扩展性低 因此,可以考虑将经常变的数据放在⽂文件中进⾏行存储,程 ...

  6. 归档-对模型数组对象(存储到本地的plist文件)也数组里存放的是模型

    一.模型文件 (1)JLMainViewsModel.h文件 必须遵循 NSCoding协议 @interface JLMainViewsModel : NSObject<NSCopying,N ...

  7. 获取保存在沙盒中plist文件的用户的字典信息

    获取保存在沙盒中plist文件的用户的字典信息

  8. iOS-图片浏览器(字典和plist文件的使用)

    // //  ViewController.m //  19-图片浏览器 // //  Created by hongqiangli on 2017/7/31. //  Copyright © 201 ...

  9. plist文件、NSUserDefault 对文件进行存储的类、json格式解析

    ========================== 文件操作 ========================== Δ一 .plist文件 .plist文件是一个属性字典数组的一个文件: .plis ...

随机推荐

  1. APP 自动化之手势操作appium提供API详解(四)

    一.手势操作1.上下左右滑屏 swipe---滑动 java-client 4.x 是有swipe方法的,可以通过传递坐标信息就可以完成滑动androidDriver.swipe(startx, st ...

  2. python调试出现报错:SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xb0 in position 9: invalid start byte

    原因:如图,代码里字符串里加上汉字就会报相关错误: 解决办法:开头加上 #-*-coding:GBK -*-   即可解决

  3. Buildroot 用户手册 (中文)

    文章目录 I. Getting started 1. About Buildroot 2. System requirements 2.1. Mandatory packages 2.2. Optio ...

  4. pipeline学习

    目录 一.常用语法 二.基础使用 三.使用 Groovy 沙盒 四.参数化构建过程 五.pipeline script from SCM 六.参考 一.常用语法 1.拉取git仓库代码 checkou ...

  5. Python知识整理(二)

    6.高级特性--简化代码量 1.切片 L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3.即索引0,1,2,正好是3个元素. 如果第一个索引是0,还可以省略:L[:3] Python支持 ...

  6. Json跨域登录问题的之Access-Control-Allow-Origin 站点跨域请求的问题

    跨域调用json问题 闲暇之时,做了一个博客站点,站点发布网络之后程序功能完成,最后发现了一个跨域的问题,比如我使用abc.com打开系统,一切正常,后台没有任何文件请求报错问题,然后我又使用了www ...

  7. Django笔记&教程 6-1 表单(Form)介绍

    Django 自学笔记兼学习教程第6章第1节--表单(Form)介绍 点击查看教程总目录 1 介绍 如果网站要让用户输入并提交数据(比如注册登录),则需要用到表单. 单纯的html也能写出表单,格式一 ...

  8. Three.js实现脸书元宇宙3D动态Logo

    背景 Facebook 近期将其母公司改名为 Meta,宣布正式开始进军 元宇宙 领域.本文主要讲述通过 Three.js + Blender 技术栈,实现 Meta 公司炫酷的 3D 动态 Logo ...

  9. [atARC128F]Game against Robot

    为了方便,下文中的$n$是原来的$\frac{n}{2}$ 当确定排列$\{p_{i}\}$后,将$a_{i}$按照$p_{i}$从大到小排序,那么机器人即会不断选第一个元素 考虑玩家最后选择的$n$ ...

  10. [loj6518]序列

    参考ExtremeSpanningTrees,考虑优化整体二分时求$g_{i}\in \{w_{mid},w_{mid+1}\}$的最优解 首先题目有一个条件似乎没有写出来,是保证$l\le k\le ...