前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >iOS操作属性列表plist(增删改查)

iOS操作属性列表plist(增删改查)

作者头像
Cloudox
发布于 2021-11-23 03:00:34
发布于 2021-11-23 03:00:34
1.6K00
代码可运行
举报
文章被收录于专栏:月亮与二进制月亮与二进制
运行总次数:0
代码可运行

iOS的存储方式之一——属性列表plist,还是经常见到的,可以很方便的用来管理一些有序的批量数据,特别是用来显示固定的内容到表单上时,不需要在代码中反复地繁琐编写数组,而可以在plist属性列表中进行可视化操作,极为便捷,本文讲解如何创建和使用plist列表,并显示在表单上。

达到下面的效果:

创建plist属性列表文件:

首先我们新建一个Single View的工程,这样就有可以直接使用的storyboard和ViewController文件,然后创建一个属性列表文件。

Xcode左侧的工程文件列表中,找一个你喜欢的位置,一般在Supporting Files文件夹内,新建我们的plist文件,方法是右键选择New File...或者按command+N键打开新建文件的窗口,在OS X的Resource中找到Property List类型文件:

创建后会得到一个plist文件,初始如下:

可以看到有三列:Key、Type、Value,分别表示键名、类型和值,这里的初始类型是一个Dictionary,我们先改成数组Array的类型。

PS:看到别的教程都说可以改变键的名字来根据键找到对应的属性,String类型的也一样,但我却找不到方法改,用xml方式改也是说错误,只能用数组的形式来根据位置找,求高人指点

如上图,保证最左边那个三角形箭头是往下的,这表示你打开了Root这个数组在其下进行操作,否则就表示同级操作,点击那个加号,就可以在数组内添加数据,如果最左边的三角形不是往下的,那点击加号则会再创建一个新的平级的量。

这里我们在数组内添加三条数据,类型为String型,值如图设置:

这样我们的plist属性列表就设置好了,这种可视化操作非常方便,但其实plist的本质是一个xml文件,我们可以在xml形式下查看修改也是一样的,方法是对右键点击plist文件,选择Open As --> Source Code,就可以看到了,如图:

在这里更改也是可以的,我们还是回到plist的显示方式,方法还是跟刚才一样。

在storyboard中添加Table View:

我们打开storyboard文件,在右下方的控件列表中,找到Table View,拖动到storyboard里的视图中去,如图:

选择右侧最右边的关联部分,把Table View的dataSource和delegate都关联到我们的ViewController中去,同时,把Table View本身也关联到ViewController.h中去创建一个Outlet变量,这样就可以在代码中操作这个Table View了,效果如图:

代码实现对plist的操作并显示到Table View:

1、准备工作

先打开.h文件,添加TableView的数据源和协议委托,并创建一个存储plist中数组内容的可变数组:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//ViewController.h文件中  
  
#import <UIKit/UIKit.h>  
  
@interface ViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> // 添加TableView委托  
@property (strong, nonatomic) NSMutableArray *listData;// 用来存储plist内容  
@property (weak, nonatomic) IBOutlet UITableView *tableView;  
  
@end 

2、读取plist文件

我们通过plist文件名来找到文件,把路径保存在变量path中,然后用一个数组获取plist文件中的内容,并转移到我们刚才创建的用来存储plist内容的变量中去:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//ViewController.m文件中  
  
   // 读取plist  
   NSString *path = [[NSBundle mainBundle] pathForResource:@"List" ofType:@"plist"];// 找到plist文件  
   NSArray *array = [[NSArray alloc] initWithContentsOfFile:path];// 获取文件列表  
   self.listData = [NSMutableArray arrayWithArray:array];  
   NSLog(@"%@", self.listData);  

3、设置Table View的数据源

这里只要简单地提供表单的行数一级每一行的内容就可以了,我们通过刚才的数组,通过行数来获取对应位置的plist内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    //ViewController.m文件中  
  
#pragma mark TableView Data Source Methods  
// 表单的行数  
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {  
    return [self.listData count];  
}  
  
// 表单每行的内容  
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {  
    static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier";  
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SimpleTableIdentifier];  
    if (cell == nil) {  
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:SimpleTableIdentifier];  
    }  
    NSUInteger row = [indexPath row];  
    // 通过行数来返回对应位置的plist内容  
    cell.textLabel.text = [self.listData objectAtIndex:row];  
    return cell;  
}  

4、去除列表多余线条

这里提供一个简单的方法直接去除多余的表单线条,在viewDidLoad方法中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//ViewController.m文件中  
  
// 去除多余表单线条  
self.tableView.tableFooterView = [[UIView alloc]init];  

原理也不是很懂,求高人指点

效果如图:

5、添加plist内容

要增加plist内容,我们只要先在刚才存储的可变数组中添加内容,然后把这个可变数组写入到原文件位置就好了,然后重新读取显示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//ViewController.m文件中  
  
// 添加plist内容  
[self.listData addObject:@"java"];  
[self.listData writeToFile:path atomically:YES];// 写入文件  
array = nil;  
array = [[NSArray alloc] initWithContentsOfFile:path];// 重新获取  
NSLog(@"%@", array);  
[self.listData removeAllObjects];  
[self.listData addObjectsFromArray:array];  
[self.tableView reloadData];// 重置表单  

效果如图:

6、删除plist内容

同添加的思路一样,同样也是先操作可变数组,删除某个位置的内容,然后将可变数组存入原位置,再重新读取显示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//ViewController.m文件中  
  
// 删除plist内容  
[self.listData removeObjectAtIndex:2];  
[self.listData writeToFile:path atomically:YES];// 写入文件  
array = nil;  
array = [[NSArray alloc] initWithContentsOfFile:path];// 重新获取  
NSLog(@"%@", array);  
[self.listData removeAllObjects];  
[self.listData addObjectsFromArray:array];  
[self.tableView reloadData];// 重置表单  

效果如图:

7、修改plist内容

还是一样的思路,修改可变数组某个位置的内容,存入原位置,重新读取显示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//ViewController.m文件中  
  
// 修改plist内容  
[self.listData replaceObjectAtIndex:2 withObject:@"database"];  
[self.listData writeToFile:path atomically:YES];// 写入文件  
array = nil;  
array = [[NSArray alloc] initWithContentsOfFile:path];// 重新获取  
NSLog(@"%@", array);  
[self.listData removeAllObjects];  
[self.listData addObjectsFromArray:array];  
[self.tableView reloadData];// 重置表单  

效果如图:

对于plist的基本操作就是这样啦,还是蛮方便的。

这里有我的源码:https://github.com/Cloudox/PlistTest

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017/11/17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
iOS 二级菜单(UITableView实现)「建议收藏」
首先建立一个cell的类,用于存放cell中的内容 ,继承自uitableviewcell;
全栈程序员站长
2022/06/27
1.3K0
实践-小细节 II
button.titleLabel.textAlignment = NSTextAlignmentLeft; 这行代码是没有效果的,这只是让标签中的文本左对齐,但 并没有改变标签在按钮中的对齐方式。
進无尽
2018/09/12
7270
实践-小细节 II
Objective-C之NSDictionary学习笔记(IOS 9.1)
NSDictionary类简介 1. 以key-object的形式保存数据,是一个集合类(collection) 2. 词典中词条的保存是无序的 3. 不可变词典(内容一旦init后就不能更改) 4. 既然不能更改,当然就不能进行删除、替换、增加操作,只能查询 5. key值不能重复 属性表(@property) @property 描述 @property(readonly) NSUInteger count 词典词条的数量 @property(readonly, copy) NSArray
半纸渊
2018/09/04
1.3K0
iOS-Foundation框架中常用的类
Foundation框架中最常用的类。 Foundation框架中最我们经常用的类大致有NSString、NSArray、NSDictionary等等,虽然不需要将每一个类中提供了什么方法都记下来,但是需要做到心中有数,知道Foundation框架提供了什么样的方法,能够达到什么效果,用到的时候直接去API中查找即可,避免因为不知道有这些方法,而走弯路。 NSString NSString创建与内存存储 NSString是1个数据类型,用来保存OC字符串,NSString的本质是1个类,既然是1个类,所以,
xx_Cc
2018/05/10
1.7K0
Objective-C之NSArray学习笔记(IOS 9.1)
---- NSArray类简介 有序且只可以存储Objective-C对象的数组 初始化后,内容不可变,长度也不可变,不能进行增、删、改操作 不能存放nil (nil是标志数组的结束) 在MRC模式下,会发送retain消息于每个加入数组中的元素都进行保持,数组被释放的时候会发送release消息 ---- 属性表(@property) @property 描述 @property(readonly) NSUInteger count 数组元素的个数 @property(nonatomic,
半纸渊
2018/09/04
6690
OC知识--Foundation框架详尽总结之『数组类』
本文首发于我的个人博客:『不羁阁』 https://bujige.net 文章链接:https://bujige.net/blog/iOS-Foundation-Array.html 本文对Foundation框架中的数组类(NSArray、MutableNSArray)的使用做一个详细的总结。 1. NSArray 1. NSArray介绍 NSArray是OC中的数组类,开发中建议尽量使用NSArray替代C语言中的数组 C语言中虽然也有数组,但在开发的过程中存在一些弊端 int arr
程序员充电站
2018/05/31
7050
iOS开发之表视图爱上CoreData
  在接触到CoreData时,感觉就是苹果封装的一个ORM。CoreData负责在Model的实体和sqllite建立关联,数据模型的实体类就相当于Java中的JavaBean, 而CoreData的功能和JavaEE中的Hibernate的功能类似,最基本是两者都有通过对实体的操作来实现对数据库的CURD操作。CoreData中的上下文(managedObjectContext)就相当于Hibernate中的session对象, CoreData中的save操作就和Hibernate中的commit,还
lizelu
2018/01/11
2.2K0
iOS开发之表视图爱上CoreData
iOS-MVVM 模式简单演练
本篇只是简单介绍一下MVVM的大致模式,每个人对每种架构模式有自己的理解,本文也是单纯的从获取新闻列表数据,并将其显示到界面上而已。暂时不做过多的考虑。 ---- MVVM 简介 看下MVVM大致模式图 : 相当于在View、ViewController和Model之间多了一层ViewModel。那么多出这层起到了什么作用呢?好处又好在哪里呢? 简单说就是如果数据结构有变动,而View层没有变动的话,那么只要处理ViewModel中的业务逻辑就可以了。ViewModel的主要作用就是处理数据、处理一些小的业
用户1890628
2018/05/10
8620
IOS开发系列—Objective-C之Foundation框架
概述 我们前面的章节中就一直新建Cocoa Class,那么Cocoa到底是什么,它和我们前面以及后面要讲的内容到底有什么关系呢?Objective-C开发中经常用到NSObject,那么这个对象到底是谁?它为什么又出现在Objective-C中间呢?今天我们将揭开这层面纱,重点分析在IOS开发中一个重要的框架Foundation,今天的主要内容有: 1. Foundation概述 2. 常用结构体 3. 日期 4. 字符串 5. 数组 6. 字典 7. 装箱和拆箱 8. 反射 9. 拷贝 10. 文件操作
用户1941540
2018/06/20
7750
iOS-UITableView 详解(一)
iOS-UITableView 详解 (一) ✨建议收藏,用到时候一查就明白了 UITableView可以说是iOS开发中最重要的控件之一,它的使用非常广泛,今天我们来学习UITableView的使
xx_Cc
2018/05/10
1.4K0
【 iOS 应用开发 】 UIKit 控件 ( 代码生成控件 | UIView 属性方法 | Storyboard | Bundle | Property List | 动画 | 图片内存优化 )
项目创建流程 : ① 选择 Create a new Xcode project , ② 创建 Single View Application 项目 , ③ 设置项目信息 , ④ 设置代码路径并创建 ;
韩曙亮
2023/03/27
4K0
【 iOS 应用开发 】 UIKit 控件 ( 代码生成控件 | UIView 属性方法 | Storyboard | Bundle | Property List | 动画 | 图片内存优化 )
iOS开发之微信聊天页面实现
  在上篇博客(iOS开发之微信聊天工具栏的封装)中对微信聊天页面下方的工具栏进行了封装,本篇博客中就使用之前封装的工具栏来进行聊天页面的编写。在聊天页面中主要用到了TableView的知识,还有如何在俩天中显示我们发送的表情,具体请参考之前的博客:IOS开发之显示微博表情,在这儿就不做赘述啦。在聊天页面用到了三对,六种Cell,不过cell的复杂度要比之前的新浪微博(IOS开发之新浪围脖)简单的多。废话少说吧,还是先来几张效果图,在给出实现代码吧。   聊天界面的效果图如下:在下面的聊天界面中中用到了3类
lizelu
2018/01/11
4.2K0
iOS开发之微信聊天页面实现
iOS开发:UICollectionViewCell删除的实现方法
使用场景:在UICollectionView的cell中,点击长按手势删除列表中的其中一个UICollectionViewCell的方法。具体实现步骤如下所示。
三掌柜
2021/12/03
2.3K0
IOS开发之显示微博表情
  在上一篇博客中山寨了一下新浪微博,在之后的博客中会对上一篇代码进行优化和重用,上一篇的微博请求的文字中有一些表情没做处理,比如带有表情的文字是这样的“我要[大笑],[得意]”。显示的就是请求的字符串,那么我们如何把文字在本地转换成表情呢?下面将要说一下显示表情的解决方案。   要用到的知识:IOS开发中的资源文件.plist, 可变的属性字符串,TextView和正则表达式的使用。   解决的整体思路:把源字符串同过正则匹配获取到每个表情的range, 再通过range获取元字符串中的表情字符串,如[哈
lizelu
2018/01/11
1.3K0
IOS开发之显示微博表情
OC知识--Foundation框架详尽总结之『字典类』
本文首发于我的个人博客:『不羁阁』 https://bujige.net 文章链接:https://bujige.net/blog/iOS-Foundation-Dictionary.html 本文对Foundation框架中的字典类(NSDictionary和NSMutableDictionary)的使用做一个详细的总结。 1. NSDictionary 1.NSDictionar介绍 Dictionary翻译过来叫做"字典" 日常生活中,“字典”的作用:通过一个拼音或者汉字,就能找到对应的详细
程序员充电站
2018/05/31
7340
iOS应用数据存储(数据持久化)的常用方式一、iOS数据持久化方式二、应用沙盒(应用程序的文件夹)三、使用方法
一、iOS数据持久化方式 (1)XML属性列表(plist)归档 (2)Preference(偏好设置),本质还是通过“plist”来存储数据, 但是使用更简单(无需关注文件、文件夹路径和名称) (3)NSKeyedArchiver归档(NSCoding),可以把任何对象, 直接保存为文件的方式。 (4)SQLite3,当非常大量的数据存储时使用 (5)Core Data,就是对SQLite的封装 关于bundle路径和sandbox沙河路径: (1)bundle路径:应用程序 (APP) 在手
用户2141756
2018/05/18
2.7K0
iOS开发之UITableView联动实现城市选择器
在 iOS开发之城市选择器一文中用两列的UIPickerView实现了城市选择器,今天用两个UITableView来实现一下,首先这种联动在很多地方用得上,而且方法有好几种,我这里选择了个人喜欢的一种方式:弄两个UITableView,让当前控制器管理。这种方式总体思路如下: 1、添加两个UITableView到当前控制器中,分别设置它们的的尺寸,然后拖线到控制器中 2、左边的表格设置数据源和代理为当前控制器,然后显示数据,右边的表格也设置数据源为当前控制器,然后显示数据操作。 3、监听左边表格控制器
YungFan
2018/05/03
2.2K0
iOS开发之UITableView联动实现城市选择器
在iOS中怎样创建可展开的Table View?(上)
几乎所有的app都有一个共同特征,它们向用户提供了多个视图控制器来导航和工作.这些视图控制器可以用在很多方面,例如,简单地显示某种信息在屏幕上,或者从用户的输入收集复杂的数据.为不同功能的app创建新的视图控制器经常是强制性的,并且好几次都是有点让人退缩的任务.然而,如果你只是使用可展开的tableview,有时也可能避免创建视图控制器(以及在storyboard中它们各自的场景).
hrscy
2018/08/30
1.8K0
在iOS中怎样创建可展开的Table View?(上)
【IOS开发基础系列】Storyboard专题
        如果你的 app 有大量的窗口,故事板能帮你减少许多用于从一个窗口转到另一个窗口的导航代码。与每个viewcontroller一个单独的 nib 文件不同,你的 app 只需用一个故事板文件(其中可以包含所有的viewcontroller 以及它们之间的关系)即可。
江中散人_Jun
2023/10/16
1.3K0
【IOS开发基础系列】Storyboard专题
IOS开发之新浪围脖
  IOS开发和Web开发一样,网络请求方式包括Get和Post方式。Get和Post两者有和特点和区别,在本篇博客中不做过多的论述,本篇的重点在于如何GET数据和POST数据。下面还会提到如何在我们的项目中使用CocoaPods, CocoaPods的安装和使用教程请参考链接http://code4app.com/article/cocoapods-install-usage。上面详细的介绍了CocoaPods的安装过程和如何通过CocoaPods引入第三方类库。在本篇博客中提到CocoaPods,是因为
lizelu
2018/01/11
1.2K0
IOS开发之新浪围脖
推荐阅读
相关推荐
iOS 二级菜单(UITableView实现)「建议收藏」
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验