1、Plist 文件概述

直接将数据直接写在代码里面,不是一种合理的做法。如果数据经常改,就要经常翻开对应的代码进行修改, 造成代码扩展性低。

因此,可以考虑将经常变的数据放在文件中进行存储,程序启动后从文件中读取最新的数据。如果要变动数 据,直接修改数据文件即可,不用修改代码。

一般可以使用属性列表文件存储 NSArray 或者 NSDictionary 之类的数据,这种属性列表文件的扩展名是 plist, 因此也成为“Plist 文件”。

2、创建 Plist 文件

在创建 Plist 文件的时候要特别注意名称当中不能带“info”,如果带了“info”会导致 xcode 把它误当作一个项 目中某个文件而出现问题。,导致文件加载不进来。

clipboard.png

3、 解析Plist文件

(1)获得 Plist 文件的全路径

NSBundle *bundle = [NSBundle mainBundle];
NSString *path =
[bundle pathForResource:@"imageData(文件名)" ofType:@"plist(扩展名)"];

(2)加载 plist 文件

//如果从网络加载可以用:
//_images = [NSArray arrayWithContentsOfUrl:url];
 _images = [NSArray arrayWithContentsOfFile:path];
 - (NSArray *)images
{
  if (_images == nil)
  {
   //可以利用 mainBundle 获取手机里面的任何资源
   NSBundle *bundle =  [NSBundle mainBundle];
   NSString *path =
[bundle pathForResource:@"imageData" ofType:@"plist"]; self.imageData = [NSArray arrayWithContentsOfFile:path];
 }

  return _images; 
}

打印项目所在Mac的路径:

// 获得项目的路径
NSBundle *bundle = [NSBundle mainBundle];
NSLog(@"%@", bundle);

clipboard.png

获得项目目录下的plist文件路径

// 获得项目目录下的plist文件路径
 NSString *path = [bundle pathForResource:@"images" ofType:@"plist"];
    NSLog(@"%@", path);

clipboard.png

plist添加数据:
Root为数组类型,里边包含两个字典

clipboard.png

完整代码:

//
//  ViewController.m
//  02-plist学习
//
//  Created by kaiyi wang on 16/8/25.
//  Copyright © 2016年 Corwien. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
   
    // 1.获得plist文件的全路径
    NSBundle *bundle = [NSBundle mainBundle];
    
    NSString *path = [bundle pathForResource:@"images" ofType:@"plist"];
    // NSLog(@"%@", path);
    
    NSArray *myPlist = [NSArray arrayWithContentsOfFile:path];
    NSLog(@"%@", myPlist);   // 打印plist
    
    // NSNumber *num = @0;
    // 获取数组的第一个元素,字典类型
    NSDictionary *mydict = [myPlist objectAtIndex:0];   
    NSLog(@"%@", mydict[@"name"]);
    
}


@end

打印结果:

clipboard.png

是把 plist 文件转成一个 NSArray,里面存放各 Dictionary。以后可以根据索引从 dictArray 中取出对应 Dictionary, 再根据字段取出对应数据。


Corwien
6.3k 声望1.6k 粉丝

为者常成,行者常至。