1.简介

plist作为IOS的固化文件,就好比java中properties文件,但是在IOS中plist是可读写的。

本文将介绍自定义静态的plist文件。

2.自定义静态plist文件

右击你的目的文件夹,然后选择【New File....】进行如下选择:

我们创建了一个goods的plist文件,它的默认内容是:

我们预计他是包含一个团购的cell内容,包含上平图片、名称、价格和当前购买人数

他是一个以数组,元素为字典类型,字典中以保存图片、名称、价格和当前购买人数信息:

可以如下定义:

为了简便起见,我们在数组中定义了25个字典元素,其中内容都差不多,只有售出数和价格有差别。

3.懒加载方式读取plist内容

1.定义Model,注意model内的属性名称和plist中的属性名称必须一致,以为后续利用字典进行方便的初始化model

同时建立类方法来初始化model和加载plist

#import <Foundation/Foundation.h>

@interface XFGoodModel : NSObject
@property (nonatomic,copy) NSString *name;
@property (nonatomic,copy) NSString *image;
@property (nonatomic,assign) NSInteger price;
@property (nonatomic,assign) NSInteger soldNum;

- (instancetype)initWithDic:(NSDictionary *)dic;
+ (instancetype)goodWithDic:(NSDictionary *)dic;

+ (NSArray *)goodsList;
@end

2.实现初始化和加载方法

//
//  XFGoodModel.m
//  How to create groupBuy page
//
//  Created by apple on 15/12/15.
//  Copyright © 2015年 apple. All rights reserved.
//

#import "XFGoodModel.h"

@implementation XFGoodModel
- (instancetype)initWithDic:(NSDictionary *)dic
{
    if (self = [super init])
    {
        // 利用字典来进行属性初始化
        [self setValuesForKeysWithDictionary:dic];
    }

    return self;
}

+ (instancetype)goodWithDic:(NSDictionary *)dic
{
    return [[self alloc] initWithDic:dic];
}

+ (NSArray *)goodsList
{
    // 加载plist
    NSString *path = [[NSBundle mainBundle] pathForResource:@"goods" ofType:@"plist"];
    NSArray *dictArray = [NSArray arrayWithContentsOfFile:path];

    // 字典转模型
    NSMutableArray *tempArray = [NSMutableArray array];
    for (NSDictionary *dic in dictArray)
    {
        XFGoodModel *good = [XFGoodModel goodWithDic:dic];
        [tempArray addObject:good];
    }
    return tempArray;
}

@end

我们将plist的加载和初始化都封装进了对应的model中。

3. 加载model

一般我们会在controller中将plist中的数据加载以便于呈现,在controller中我们使用懒加载的方式进行plist数据的加载

一般可以这样做:

import "ViewController.h"
#import "XFGoodModel.h"

@interface ViewController ()
@property (nonatomic,strong) NSArray *goodsList;
@end

@implementation ViewController

/**
 *  懒加载plist信息
 */
-(NSArray *)goodsList
{
    // 如果未空就进行加载
    if(!_goodsList)
    {
        _goodsList = [XFGoodModel goodsList];
    }

    return _goodsList;
}

测试一下,基本上plist的加载都可以按照此方式进行操作,唯一需要注意的是根据plist的结构定义自己的model并根据plist结构进行循环初始化model。

[How to]如何自定义plist文件和读取plist文件内容的更多相关文章

  1. spring 框架的xml文件如何读取properties文件数据

    spring 框架的xml文件如何读取properties文件数据 第一步:在spring配置文件中 注意:value可以多配置几个properties文件 <bean id="pro ...

  2. java读取 500M 以上文件,java读取大文件

    java 读取txt,java读取大文件 设置缓存大小BUFFER_SIZE ,Config.tempdatafile是文件地址 来源博客http://yijianfengvip.blog.163.c ...

  3. c文件二进制读取写入文件、c语言实现二进制(01)转化成txt格式文本、c读取文件名可变

    c语言实现二进制(01)转化成txt格式文本: 下面的程序只能实现ascall对应字符转换,如果文件内出现中文字符,则会出现错误. 本程序要自己创建个文本格式的输入文件a1.txt,编译后能将文本文件 ...

  4. php操作文件(读取写入文件)

    一,PHP如何读取文件 PHP读取文件可以读取当前服务器或远程服务器中的文件.其步骤是:打开文件.读文件和关闭文件. 1,PHP如何打开文件 使用PHP函数fopen()打开一个文件,fopen()一 ...

  5. [Python] python3 文件操作:从键盘输入、打开关闭文件、读取写入文件、重命名与删除文件等

    1.从键盘输入 Python 2有两个内置的函数用于从标准输入读取数据,默认情况下来自键盘.这两个函数分别是:input()和raw_input(). Python 3中,不建议使用raw_input ...

  6. jspsmart(保存文件)+poi(读取excel文件)操作excel文件

    写在前面: 项目环境:jdk1.4+weblogic 需求:能上传excel2003+2007 由于项目不仅需要上传excel2003,还要上传excel2007,故我们抛弃了jxl(只能上传exce ...

  7. Node.js——fs模块(文件系统),创建、删除目录(文件),读取写入文件流

    /* 1. fs.stat 检测是文件还是目录(目录 文件是否存在) 2. fs.mkdir 创建目录 (创建之前先判断是否存在) 3. fs.writeFile 写入文件(文件不存在就创建,但不能创 ...

  8. 在JavaScript文件中读取properties文件的方法

    假设有JavaScript文件叫做:readproperties.js,这个文件需要读取config.properties这个配置文件,步骤如下: 1.  下载插件jquery.i18n.proper ...

  9. C#写入(覆盖形式)数据到CSV文件 和 读取CSV文件

    /// <summary> /// 写入数据到CSV文件,覆盖形式 /// </summary> /// <param name="csvPath"& ...

随机推荐

  1. Python文件对象的访问模式

  2. [洛谷P4999]烦人的数学作业

    题目大意:定义$f(x)$表示$x$每一个数位(十进制)的数之和,求$\sum\limits_{i=l}^rf(i)$,多组询问. 题解:数位$DP$,可以求出每个数字的出现个数,再乘上每个数字的大小 ...

  3. [HNOI2012]排队 组合数

    公式:A(n,n)*A(n+1,2)*A(n+3,m) + A(n,n)*C(m,1)*A(2,2)*C(n+1,1)*A(n+2,m-1) 分情况讨论推出公式 前者为无论何时都合法的,后者为先不合法 ...

  4. [LNOI] 相逢是问候 || 扩展欧拉函数+线段树

    原题为2017六省联考的D1T3 给出一个序列,m次操作,模数p和参数c 操作分为两种: 1.将[l,r]区间内的每个数x变为\(c^x\) 2.求[l,r]区间内数的和%p 首先,我们要了解一些数论 ...

  5. HDU.3342 Legal or Not (拓扑排序 TopSort)

    HDU.3342 Legal or Not (拓扑排序 TopSort) 题意分析 裸的拓扑排序 根据是否成环来判断是否合法 详解请移步 算法学习 拓扑排序(TopSort) 代码总览 #includ ...

  6. HDOJ.2187 悼念512汶川大地震遇难同胞——老人是真饿了(贪心)

    悼念512汶川大地震遇难同胞--老人是真饿了 点我挑战题目 题目分析 每组数据给出所拥有的钱数,和大米的种类.每种大米给出单价(每单位重量)和大米的重量.求能买到的大米最大重量是多少? 采用贪心算法. ...

  7. JavaScript定义类的方式与其它OO语言有些差异

    JavaScript面向对象的程序编写与其它OO语言有一些出入,所以使用JavaScript的面向对象特性的时候,需要注意一些规范性的问题.下面就简单地谈一下,JavaScript如何定义一个类,在定 ...

  8. 获取 exception 对象的字符串形式(接口服务返回给调用者)

    工具类: package com.taotao.common.utils; import java.io.PrintWriter; import java.io.StringWriter; publi ...

  9. HTTP的特点?

    (1)HTTP是无连接: 无连接的含义是限制每次连接只处理一个请求.服务器处理完客户的请求,并收到客户的应答后,即断开连接.采用这种方式可以节省传输时间. (2)HTTP是媒体独立的: 这意味着,只要 ...

  10. 再续前缘-apache.commons.beanutils的补充

    title: 再续前缘-apache.commons.beanutils的补充 toc: true date: 2016-05-32 02:29:32 categories: 实在技巧 tags: 插 ...