什么是Plist文件

  1. 直接将数据直接写在代码里面,不是一种合理的做法。如果数据经常改,就要经常翻开对应的代码进行修改,造成代码扩展性低
  2. 因此,可以考虑将经常变的数据放在文件中进行存储,程序启动后从文件中读取最新的数据。如果要变动数据,直接修改数据文件即可,不用修改代码
  3. 一般可以使用属性列表文件存储NSArray或者NSDictionary之类的数据,这种“属性列表文件”的扩展名是plist,因此也称为“plist文件”

plist文件创建

  • 如图创建文件: 
  • key的root箭头向下的时候才能添加【注意】,可以添加到字典或者数组中,如果不是向下,添加的是平级的关系的。
  • 可以复制进行快速的添加
  • 加载plist文件的时候,返回值什么时候用NSArray,什么时候使用NSMutableArray?
  1. 只要是添加到项目中的plist文件,加载plist文件的时候用的是全路径

注意事项

  1. 项目中黄颜色的文件夹有的是虚拟的文件的【右击 show in finder 是找不到的】,装到手机上这个文件夹也是不存在的。【所以在写路径的时候是没有这一层路径的】
  2. 项目中有的黄色的文件夹不是虚拟的,是存在的,那么在获取路径的时候是需要也是不需要写这层的。装到手机上也是不存在的。
  3. 如 :NSString *file = [bundle pathForResource:@"shops" ofType:@"plist"],不需要写@“data/shops” 如图:
  4. iOS项目中plist文件如何配置_iOS项目中plist文件如何配置

  5. 在添加文件的时候,弹出的选项如图:
  • 第一个是复制,如果不复制的话,删除的时候也会把引用的给删除了。
  • 第三个:是否添加到主资源包里面,如果没有选中添加,那么项目中是可以看到的, 但是装到手机里面是没有的。
    【解决方法: 如果是资源文件:删除引用重写添加;或者选中项目--Build Phases - copy Bundle Resources 在里面添加
    如果是类相关的文件,这一项没有勾选,项目中是有的,但是加载的时候会报错的
    如图类没有定义
  • iOS项目中plist文件如何配置_iOS项目中plist文件如何配置_02

  • 这个时候先去这里查看这个类是否参与编译:或者选中项目--Build Phases -compile Sources是否有这个类的.m文件,如果没有就去添加
  • 第二个:

          注意:自己创建的plist文件名不能叫Info.plist,无论是否在同一个文件夹中:plist的文件名不能叫做“info”、“Info”之类的

  1. 注意:自己创建的plist文件名不能叫Info.plist,无论是否在同一个文件夹中
plist的文件名不能叫做“info”、“Info”之类的

解析Plist文件

1. 通过代码来解析Plist文件中的数据

    获得Plist文件的全路径

NSBundle *bundle = [NSBundle mainBundle];

NSString *path = [bundle pathForResource:@"shops" ofType:@"plist"];



加载plist文件
// 加载plist数据
    
    // 一个NSBundle对象对应一个资源包(图片、音频、视频、plis等文件)
    // NSBundle的作用:用来访问与之对应的资源包内部的文件,可以用来获得文件的全路径
    // 项目中添加的资源都会被添加到主资源包中
    // [NSBundle mainBundle]关联的就是项目的主资源包
    //NSbundle也是一个类,也有init方法
    NSBundle *bundle = [NSBundle mainBundle];
    
    // 利用mainBundle获得plist文件在主资源包中的全路径
    NSString *file = [bundle pathForResource:@"shops" ofType:@"plist"];
//    NSString *file = [bundle pathForResource:@"shops.plist" ofType:nil];
    
    // 凡是参数名为File,传递的都是文件的全路径
    self.shops = [NSArray arrayWithContentsOfFile:file];