iPhone开发之.plist文件的创建于使用—— 代码案例 ( 图片浏览器的创建)

2024-08-28 16:32

本文主要是介绍iPhone开发之.plist文件的创建于使用—— 代码案例 ( 图片浏览器的创建),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、懒加载即第一次使用或调用时才进行加载。不调用的话就不会加载。
2、懒加载的步骤
(1)在Supporting Files下新建.plist文件,并编辑此文件。把整体建成一个包含所有数据的NSArray类型数据,然后在NSArray中添加多条NSDictionary类型的数据作为元素,再在每条元素NSDictionary中添加所需要的NSString类型的键值对。
(2)在控制器的.h文件中添加一个NSArray类型的@property变量。假设为@property(nonatomic,strong)NSArray *pic;
(3)重写数组对象pic的get方法,实现懒加载。在pic数组变量的get方法中实现步骤如下:
1>  获取pic.plist文件的路径。
获取pic.plist文件的路径赋值给path变量
[NSBundle mainBundle] 表示获取这个app安装到手机上时的根路径,然后在app的安装的根目录下搜索pic.plist文件的路径
具体代码如下所示:
-(NSArray *)pic
{
if(_pic == nil){
NSString *path = [[NSBundle mainBundle] pathForResource:@“pic.plist” ofType:nil];
// 读取文件
NSArray *array = [NSArray arrayWithContentsOfFile:path];
}
   return _pic;
}
3、图片播放器的实现步骤:
(1)新建.plist文件(pic.plist),编辑内容,添加数组NSArray,并向数组添加每个字典作为元素。(每个字典中有NSString类型的两个键值对,icon键表示图片的名称,title表示图片下方的标题)
(2)在控制器的.h文件中添加数组类型的属性(@property)即
@property(nonatomic,strong)NSArray *pic;
(3)重写数组的get方法,在方法内获取app在手机的根路径,从根路径读取数组到一个NSArray数组,返回数组。即实现懒加载。
(4)在控制器的.h文件中添加一个表示当前张数的索引,不进行赋值前系统默认都是0的。(@property)
@property(nonatomic,assign)int index;
(5)在控制器的.h文件中添加一个UIImageView属性(imgViewIcon),一个在上边显示页数的UILabel组件属性(lblIndex),和一个显示图片下边标题的UILabel组件属性(lblTitle),然后添加上一张和下一张的按钮并在viewDIdLoad方法中为组件设置属性并绑定监听方法。
(6)实现下一张图片的监听方法。
步骤如下:
1> 让索引自增一
2> 从数组中获取当前这张图片的数据
3>把获取到的数据设置给界面上的控件,通过Image属性设置图片框里的图片    
4>当图片等于最后一张时即当前索引为count-1时,将“下一张”的按钮设置为不可用即可。
具体代码如下:
-(void)next{
   self.index++;  // 1 让索引++
  NSDictionary *dict = self.pic[self.index]; // 从字典中获取当前这张图片的数据
  self.lblIndex.text = [NSString stringWithFormat:@“%d/%ld”,self.index,self.pic.count]; // 设置上方UILabel的页数内容
// 通过Image属性来设置图片框里面的图片
self.imageVIew.Icon.image = [UIImage imageNamed:dict[@“icon”]];
self.lblTitle.text = dict[@“title”]; // 设置这张图片的标题
// 当图片为最后一张时将按钮设置为不可用
self.btnNext.enabled = (self.index != (self.pic.count - 1));
}
(7)设置上一张按钮的监听方法
与实现下一张的按钮的方法基本相同,唯一不同的就是最后设置按钮禁用时代码应该进行修改。如下所示:
if(self.index == 0){
   self.btnPre.enabled = NO;
}else{
   self.btnPre.enabled = YES;
}
优化后为:
self.btnPre.enabled = (self.index != 0)
注意:
(一)此程序的第一个Bug:当程序启动时由于没有触发监听方法,没有加载plist文件的原因 不会显示图片。 
解决方案如下:在viewDidLoad方法中让index=-1;然后再调用一下下一张图片的监听方法即可。即[self  next];
(二)此程序的第二个Bug:当点击到最后一张图片把“下一张”的按钮禁用以后,再往前点击“前一张”按钮,下一张按钮仍为禁用状态。
解决方案:应该在两个监听方法中都要对两个按钮判断并设置禁用与启用状态。即把第一个监听方法中设置状态的代码加到第二个监听方法中,把第二个监听方法中设置状态的代码添加到第一个监听方法中。即可。
(三)上面Label显示的index总比张数少一。解决方法:设置内容时index+1即可。
(四)代码改进。因为第一个监听方法和第二个监听方法的内容代码大都相同。所以可以把从数组读取字典内容并给组件设置的这些雷同代码抽取到一个单独的方法中,然后分别在监听方法中调用即可。
4、plist文件的使用:
(1).plist文件一般都创建在工程下的Supporting Files下
(2)在创建.plist文件时,如果三角符号没有向下点开,那么点击数据上面的+或- 相当于对这条数据增添兄弟数据或删除这条数据。如果三角符号向下点开,那么增加删除的将会是这条数据的子数据。
(3)一般先新建一个一个NSArray类型的数据(包含所有数据的整体),点击三角符号,点击+号在NSArray中添加字典数据,一条字典数据就包含了一个对象的所有信息,即在字典内创建表示多个属性的键值对来概括一个对象的信息。属性是什么类型的,就选择什么样的值类型。创建一个对象字典后,选中字典复制粘贴再粘贴,因为NSArray数组中包含多个这样属性的不同对象。
然后逐个修改属性值即可。
(4)懒加载的方式读取.plist文件。

1> 设置一个NSArray属性,重写它的get方法在方法中先用[NSBundle mainBundle]的方法获取当前app在手机安装的根目录下plist文件的具体目录。然后从目录中利用数组的类方法arrayWithContentsO分File读取文件内容到一个新的NSArray对象中,返回对象即可。

使用.plist文件的好处如下:

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

2、在文件中创建数组包含一个字典属性对象

3、在NSArray数组中复制多个字典对象

4、对每个字典对象的各个属性值进行设置

plist文件创建完成
 
代码验证示例如下:
新建一个具有simple View的工程,拖进相应的图片资源,两个按钮的三种不同状态下的按钮,和需要播放的图片资源
然后根据文件信息按照以上步骤新建.plist文件。以下进行代码编辑如下:
编辑控制器的.h文件如下:
//
//  ViewController.h
//  plist文件的使用之图片浏览器
//
//  Created by apple on 15/8/30.
//  Copyright (c) 2015年 LiuXun. All rights reserved.
//#import <UIKit/UIKit.h>@interface ViewController : UIViewController
@property (nonatomic, strong) NSArray * pic;
@property (nonatomic, assign ) int index;
@property (nonatomic, strong) UIButton *  btnNext;
@property (nonatomic, strong) UIButton *btnPre;
@property (nonatomic, strong) UIImageView * icon;
@property(nonatomic, strong) UILabel * lblNum;
@property (nonatomic, strong) UILabel * lblTitle;-(void)next;  // 下一张按钮的监听方法-(void)pre;  // 上一张按钮的监听方法
@end
编辑控制器的.m文件如下:
//
//  ViewController.m
//  plist文件的使用之图片浏览器
//
//  Created by apple on 15/8/30.
//  Copyright (c) 2015年 LiuXun. All rights reserved.
//#import "ViewController.h"
#define   WIDTH     [UIScreen mainScreen].bounds.size.width
#define   HEIGHT   [UIScreen mainScreen].bounds.size.height@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad
{[super viewDidLoad];// 设置上方张数标题self.lblNum = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, WIDTH, WIDTH/5)];[self.view addSubview:self.lblNum];// 设置上一张图片的按钮self.btnPre = [[UIButton alloc] initWithFrame:CGRectMake(0, WIDTH/5+WIDTH/4, WIDTH/5, WIDTH/5)];[self.btnPre setBackgroundImage:[UIImage imageNamed:@"left_normal"] forState:UIControlStateNormal]; // 设置正常状态下的背景图片[self.btnPre setBackgroundImage:[UIImage imageNamed:@"left_highlighted"] forState:UIControlStateHighlighted]; // 设置按下后的背景图片[self.btnPre setBackgroundImage:[UIImage imageNamed:@"left_disable.png"] forState:UIControlStateDisabled];  // 设置禁用后的背景图片// 设置监听方法[self.btnPre addTarget:self action:@selector(pre) forControlEvents:UIControlEventTouchUpInside];[self.view addSubview:self.btnPre];//设置下一张图片的 按钮self.btnNext = [[UIButton alloc] initWithFrame:CGRectMake(0.8*WIDTH, WIDTH/5+WIDTH/4, WIDTH/5, WIDTH/5)];[self.btnNext setBackgroundImage:[UIImage imageNamed:@"right_normal"] forState:UIControlStateNormal];[self.btnNext setBackgroundImage:[UIImage imageNamed:@"right_highlighted"] forState:UIControlStateHighlighted];[self.btnNext setBackgroundImage:[UIImage imageNamed:@"right_disable"] forState:UIControlStateDisabled];[self.btnNext addTarget:self action:@selector(next) forControlEvents:UIControlEventTouchUpInside];[self.view addSubview:self.btnNext];//  设置显示图片的ImageViewself.icon = [[UIImageView alloc] initWithFrame:CGRectMake(WIDTH/5, WIDTH/5, 0.6*WIDTH, 0.6*WIDTH)];[self.view addSubview:self.icon];// 设置标题显示Label属性self.lblTitle = [[UILabel alloc] initWithFrame:CGRectMake(0, WIDTH, WIDTH, WIDTH/5)];[self.view addSubview:self.lblTitle];self.index = -1;[self next];
}// 重写数组的get方法来实现懒加载
-(NSArray *)pic
{if (_pic  == nil) {// 在app安装根目录下寻找指定plist文件的路径NSString *path = [[NSBundle mainBundle] pathForResource:@"images" ofType:@".plist"];// 从plist文件中读取内容到一个新的字典中NSArray *newArray = [NSArray arrayWithContentsOfFile:path];_pic = newArray;   // 变量赋值}return _pic;
}- (void)didReceiveMemoryWarning
{[super didReceiveMemoryWarning];}
-(void)next // 下一张按钮的监听方法
{NSLog(@"下一张");_index ++;[self setData];
}
-(void)pre  // 上一张按钮的监听方法
{NSLog(@"上一张");_index--;[self  setData];
}
-(void)setData
{NSDictionary *dict = self.pic[self.index];  // 从文件中读出的数组中取出当前索引的字典self.lblNum.text = [NSString stringWithFormat:@"%d/%d",self.index+1,self.pic.count];[self.lblNum setTextAlignment:NSTextAlignmentCenter];  // 设置字体居中self.lblTitle.text = [NSString stringWithFormat:@"%@",dict[@"desc"]]; // 从字典中取出内容设置组件[self.lblTitle setTextAlignment:NSTextAlignmentCenter];self.icon.image = [UIImage imageNamed:dict[@"icon"]];//   每次点击都判断并设置两个按钮的禁用与启用状态self.btnNext.enabled = (self.index != (self.pic.count-1));self.btnPre.enabled = (self.index != 0);
}
@end
运行结果如下:






这篇关于iPhone开发之.plist文件的创建于使用—— 代码案例 ( 图片浏览器的创建)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1115287

相关文章

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1

Pandas透视表(Pivot Table)的具体使用

《Pandas透视表(PivotTable)的具体使用》透视表用于在数据分析和处理过程中进行数据重塑和汇总,本文就来介绍一下Pandas透视表(PivotTable)的具体使用,感兴趣的可以了解一下... 目录前言什么是透视表?使用步骤1. 引入必要的库2. 读取数据3. 创建透视表4. 查看透视表总结前言

Python 交互式可视化的利器Bokeh的使用

《Python交互式可视化的利器Bokeh的使用》Bokeh是一个专注于Web端交互式数据可视化的Python库,本文主要介绍了Python交互式可视化的利器Bokeh的使用,具有一定的参考价值,感... 目录1. Bokeh 简介1.1 为什么选择 Bokeh1.2 安装与环境配置2. Bokeh 基础2

SpringBoot UserAgentUtils获取用户浏览器的用法

《SpringBootUserAgentUtils获取用户浏览器的用法》UserAgentUtils是于处理用户代理(User-Agent)字符串的工具类,一般用于解析和处理浏览器、操作系统以及设备... 目录介绍效果图依赖封装客户端工具封装IP工具实体类获取设备信息入库介绍UserAgentUtils

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

MySQL 中的 JSON 查询案例详解

《MySQL中的JSON查询案例详解》:本文主要介绍MySQL的JSON查询的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 的 jsON 路径格式基本结构路径组件详解特殊语法元素实际示例简单路径复杂路径简写操作符注意MySQL 的 J

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Pandas使用AdaBoost进行分类的实现

《Pandas使用AdaBoost进行分类的实现》Pandas和AdaBoost分类算法,可以高效地进行数据预处理和分类任务,本文主要介绍了Pandas使用AdaBoost进行分类的实现,具有一定的参... 目录什么是 AdaBoost?使用 AdaBoost 的步骤安装必要的库步骤一:数据准备步骤二:模型

使用Pandas进行均值填充的实现

《使用Pandas进行均值填充的实现》缺失数据(NaN值)是一个常见的问题,我们可以通过多种方法来处理缺失数据,其中一种常用的方法是均值填充,本文主要介绍了使用Pandas进行均值填充的实现,感兴趣的... 目录什么是均值填充?为什么选择均值填充?均值填充的步骤实际代码示例总结在数据分析和处理过程中,缺失数

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读