什么是plist文件
-
直接將數據寫在代碼里面,不是一種合理的做法。如果經常改,就要經常翻開對應的代碼進行修改,造成代碼擴展性低
-
因此,可以考慮將經常變的數據放在文件中進行存儲,程序啟動后從文件中讀取最新的數據。如果要變動數據,直接修改數據文件即可,不用修改代碼
-
一般可以使用屬性列表文件存儲
NSArray
或者NSDictionary
之類的數據,這種 屬性列表文件 的擴展名是plist,因此也稱為plist文件
plist文件的使用
原來代碼:
先聲明好了一個數組:
@property (nonatomic,strong) NSArray *shops;
在viewDidLoad
中加載數組:
self.shops = @[
@{
@"icon":@"單肩包",
@"name":@"單肩包"
},
@{
@"icon":@"鏈式包",
@"name":@"鏈式包"
},
@{
@"icon":@"手拿包",
@"name":@"手拿包"
},
@{
@"icon":@"手提包",
@"name":@"手提包"
},
@{
@"icon":@"雙肩包",
@"name":@"雙肩包"
},
@{
@"icon":@"斜挎包",
@"name":@"斜挎包"
}
];
修改代碼:
1.新建一個plist
文件
- Root為文件的根節點,Root是什么類型,將來加載出來的就是什么類型。
- 字典里放着name和icon兩個key值,即圖片和圖片名。
2.此處類型為Array
,加載出來后就是NSArray
對象,因此創建一個NSArray
類型的對象
// 創建文件路徑
NSString *file = @"";
// 創建NSArray對象
[NSArray arrayWithContentsOfFile:file];
- 凡是參數名為File的,傳遞的都是全路徑
3.創建一個NSBundle
對象來關聯一個資源包
NSBundle *bundle = [NSBundle mainBundle];
- 一個NSBundle對象對應一個資源包(圖片、音樂、視頻、plist等文件)
NSBundle
的作用:用來訪問與之對應的資源包內部的文件,可以獲得文件的全路徑- 項目中添加的資源都會被添加到主資源包中,
mainBundle
關聯的就是項目的主資源包
4.利用mainBundle
獲得plist文件在主資源包中的全路徑
NSString *file = [bundle pathForResource:@"shops" ofType:@"plist"];
或者
NSString *file = [bundle pathForResource:@"shops.plist" ofType:nil]
- 第一個參數傳文件的文件名,第二個參數傳文件的擴展名
5.最后,代碼改為:
// 加載plist數據
NSBundle *bundle = [NSBundle mainBundle];
NSString *file = [bundle pathForResource:@"shops" ofType:@"plist"];
self.shops = [NSArray arrayWithContentsOfFile:file];
plist文件解析
- 一旦加載plist,首先看根對象是什么
- 此處根對象就是個數組,因此會生成一個對應的數組對象
- 數組里面有字典,因此字典會生成一個
NSDictionary
- 因此數組讀出來就是 數組里面有字典,字典里面有name和icon兩個key
plist文件使用常見問題
-
項目里面的某個.m文件無法使用
- 檢查:Build Phoses -> Complie Sources
-
項目里面的某個資源文件(比如plist、音頻等)無法使用
- 檢查:Build Phoses -> Copy Bundle Resources
-
添加plist文件的時候,無論plist在哪個文件夾里,都不能叫Info
作者:黎明豌豆
出處:http://www.cnblogs.com/PeaZora/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此字段聲明,且在文章頁面明顯位置給出原文鏈接,否則保留追究法律責任的權利