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

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设