什麼是plist文件 直接將數據寫在代碼裡面,不是一種合理的做法。如果經常改,就要經常翻開對應的代碼進行修改,造成代碼擴展性低 因此,可以考慮將經常變的數據放在文件中進行存儲,程式啟動後從文件中讀取最新的數據。如果要變動數據,直接修改數據文件即可,不用修改代碼 一般可以使用屬性列表文件存儲 或者 之 ...
什麼是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/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此欄位聲明,且在文章頁面明顯位置給出原文鏈接,否則保留追究法律責任的權利