iOS操作屬性列表plist(增刪改查)
摘要:
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中陣列內容的可變陣列:
//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內容的變數中去:
//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內容:
//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方法中:
//ViewController.m檔案中
// 去除多餘表單線條
self.tableView.tableFooterView = [[UIView alloc]init];
原理也不是很懂,求高人指點
效果如圖:
5、新增plist內容
要增加plist內容,我們只要先在剛才儲存的可變陣列中新增內容,然後把這個可變陣列寫入到原檔案位置就好了,然後重新讀取顯示:
//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內容
同新增的思路一樣,同樣也是先操作可變陣列,刪除某個位置的內容,然後將可變陣列存入原位置,再重新讀取顯示:
//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內容
還是一樣的思路,修改可變陣列某個位置的內容,存入原位置,重新讀取顯示:
//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
轉載請註明出處,謝謝
相關文章
- 列表的增刪改查
- MongoDB增刪改查操作MongoDB
- javascript基礎(class 類屬性的操作(增,刪,改,查))(四十五)JavaScript
- PHP操作MongoDB(增刪改查)PHPMongoDB
- iOS CoreData (一) 增刪改查iOS
- mysql資料增刪改查操作MySql
- MySQL基礎操作(增刪改查)MySql
- JS字串操作之增刪改查JS字串
- 資料庫操作增刪改查模糊查資料庫
- jquery基本操作增刪改查有哪些?jQuery
- JavaAPI操作MongoDB--基本增刪改查JavaAPIMongoDB
- MyBatis框架搭建及增刪改查操作MyBatis框架
- 增刪改查
- Java物件轉JSON時如何動態的增刪改查屬性Java物件JSON
- 用thinkphp進行增刪改查的操作PHP
- 使用mybatis開發的增刪改查操作MyBatis
- uniapp雲函式教程② :商品列表增刪改查APP函式
- IOS 特定於裝置的開發:Info.plist屬性列表的設定iOS
- indexedDB 增刪改查Index
- SQL增刪改查SQL
- mysql增刪改查MySql
- Mongoose查增改刪Go
- FMDB增刪改查
- mysql增查刪改MySql
- Java實現簡單的增刪改查操作Java
- YII1 增、刪、改、查資料庫操作資料庫
- imutable.js常用增刪改查操作說明JS
- 安卓開發SQLite增刪改查操作例項安卓SQLite
- 表的建立修改及增刪改查-DML操作
- Python操作SQLServer資料庫增刪改查PythonSQLServer資料庫
- SQLAlchemy - 模組檔案以及增刪改查(CURD操作)SQL
- iOS FMDB資料庫之增刪改查使用iOS資料庫
- layui的增刪改查UI
- sql指令,增,刪,查,改SQL
- EFCore之增刪改查
- 字典的增刪改查
- redist的增刪改查Redis
- Mybatis的增刪改查MyBatis