什么是plist文件政己?
- plist文件,即屬性列表文件掏愁,全名是Property List歇由,這種文件的擴(kuò)展名為.plist,因此果港,通常被叫做plist文件沦泌。它是一種用來存儲串行化后的對象的文件,在iOS開發(fā)中通常用來存儲用戶設(shè)置辛掠,還可以用于存儲程序中經(jīng)常用到而不經(jīng)常改動的數(shù)據(jù)谢谦。下面就看一下如何創(chuàng)建和讀寫plist文件。
一萝衩、創(chuàng)建plist文件
- 1回挽、在程序中通過新建文件的方式創(chuàng)建
快捷鍵 command + n
或者File——>New——>File,選擇iOS-->Resource-->Property List
然后就是給文件命名:
這里有一點(diǎn)需要注意:
命名的時(shí)候不能用Info.plist 猩谊, INfo.plist千劈, xxxInfo.plist等形式,否則會出現(xiàn)下面的情況牌捷,因?yàn)橄到y(tǒng)中存在一個(gè)Info.plist文件墙牌,會發(fā)生沖突涡驮。
上圖中的plist文件只能是NSDictionary類型,而且添加數(shù)據(jù)時(shí)會出現(xiàn)如下的情況:
通常情況下憔古,我們想要的并不是這種效果遮怜,所以命名的時(shí)候要注意。通常我們想要的plist文件是下圖中的樣子:
在Root這一行鸿市,Type可以選擇字典或數(shù)組锯梁。
點(diǎn)擊Root這一行,然后通過點(diǎn)擊右鍵->Add Row或者點(diǎn)擊Root后面的加號來增加一行焰情。這一行中包含三個(gè)屬性陌凳,key、type内舟、value合敦。其中key是字段屬性,type是字段類型验游,value是字段對應(yīng)的值充岛。而Type又包含7中類型,其中兩種是Array和Dictionary耕蝉,這兩種是數(shù)組的形式崔梗,在它們下面還可以包含許多key-value。
而另外5種是Boolean垒在,data蒜魄,string,date场躯,number谈为。這5種類型的數(shù)據(jù)都是被array和dictionary所要包含的數(shù)據(jù)。
- 2踢关、代碼方式創(chuàng)建plist文件
獲取本地沙盒路徑
NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
獲取完整路徑
NSString *documentsPath = [path objectAtIndex:0];
NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"newsTest.plist"];
創(chuàng)建數(shù)據(jù)
//創(chuàng)建數(shù)據(jù)
NSMutableDictionary *newsDict = [NSMutableDictionary dictionary];
//賦值
[newsDict setObject:@"zhangsan" forKey:@"name"];
[newsDict setObject:@"12" forKey:@"age"];
[newsDict setObject:@"man" forKey:@"sex"];
寫入plist文件
[newsDict writeToFile:plistPath atomically:YES];
二伞鲫、讀取plist文件
- 1、獲取路徑
用新建文件的方式常見的plist文件耘成,獲取其路徑的方法如下:
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"newsModel" ofType:@"plist"];
代碼方式創(chuàng)建的plist文件獲取其路徑的方式如下:
NSArray *pathArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path1 = [pathArray objectAtIndex:0];
NSString *myPath = [path1 stringByAppendingPathComponent:@"newsTest.plist"];
- 2榔昔、讀取數(shù)據(jù)
文件是什么類型,就用什么類型的數(shù)據(jù)來接收
//newsModel.plist文件
NSMutableArray *data1 = [[NSMutableArray alloc] initWithContentsOfFile:filePath];
//newsTest.plist文件
NSMutableDictionary *data2 = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];
數(shù)據(jù)輸出如下:
三瘪菌、添加數(shù)據(jù)
同樣是先獲取路徑撒会,注意獲取路徑的方式視情況而定:
//用新建文件的方式常見的plist文件,獲取其路徑
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"newsModel" ofType:@"plist"];
//代碼方式創(chuàng)建的plist文件獲取其路徑
NSArray *pathArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path1 = [pathArray objectAtIndex:0];
NSString *myPath = [path1 stringByAppendingPathComponent:@"newsTest.plist"];
然后是取到數(shù)據(jù):
//newsModel.plist文件
NSMutableArray *data1 = [[NSMutableArray alloc] initWithContentsOfFile:filePath];
//newsTest.plist文件
NSMutableDictionary *data2 = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];
對數(shù)據(jù)進(jìn)行操作,添加數(shù)據(jù):
//新建一個(gè)字典师妙,設(shè)置屬性值
NSMutableDictionary *addData1 = [NSMutableDictionary dictionary];
[addData1 setObject:@"123" forKey:@"title"];
[addData1 setObject:@"pic.png" forKey:@"image"];
[addData1 setObject:@"wobushi" forKey:@"detail"];
//添加到數(shù)組中
[data1 addObject:addData1];
//寫入文件
[data1 writeToFile:filePath atomically:YES];
//增加一個(gè)字段”job“诵肛,并設(shè)置屬性值
[data2 setObject:@"writer" forKey:@"job"];
//寫入文件
[data2 writeToFile:plistPath atomically:YES];
修改后的數(shù)據(jù)輸出如下:
以上就是plist文件的常用操作,當(dāng)然,還可以進(jìn)行修改刪除等操作怔檩,方法類似褪秀,這里就不做描述了。