zoukankan      html  css  js  c++  java
  • 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. 知识点

    • 如果这个控件不是通过xibstoryboard创建,初始化时会调用initWithFrame:(CGRect)frame;
    • 如果是通过xibstoryboard创建,初始化时会调用initWithCoder:(NSCoder *)aDecoder;
    • 如果是通过xibstoryboard创建,初始化完毕后会调用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项目

  • 相关阅读:
    javamail发送邮件
    java复制文件夹中的所有文件和文件夹到另一个文件夹中
    jsp中使用out和response.getOutputStream的方法
    PHP数组用法
    PHP中的session
    java中list按照某个属性排序方法
    java读取xml文件内容
    C#实现验证码
    java实现验证码功能
    Java IO(四)------字节输入输出流
  • 原文地址:https://www.cnblogs.com/HMJ-29/p/4758657.html
Copyright © 2011-2022 走看看