ios開發(fā)初學(xué)者經(jīng)常使用plist文件來模擬互聯(lián)網(wǎng)數(shù)據(jù)巢掺,它的好處在于能幫我們存儲我們編程中需要的素材數(shù)據(jù),需要使用時調(diào)用極其方便劲蜻,
是ios開發(fā)和學(xué)習(xí)中常用的文件之一陆淀。下面我們來深入學(xué)習(xí)下plist文件在加載復(fù)雜結(jié)構(gòu)的數(shù)據(jù)時如何進行讀取,還有我們自己怎么整理數(shù)據(jù)結(jié)構(gòu)復(fù)雜的plsit文件先嬉。
先了解下plist文件的定義和基本用法:plist文件的全名是:Property List轧苫,它是一種用來存儲串行化后的對象的文件。文件的擴展名是.plist疫蔓,通常就稱為plist文件含懊。文件是xml格式,在ios開發(fā)工具xcode中我們能看到plist文件的xml格式和.plist格式衅胀。我們現(xiàn)在先創(chuàng)建一個plsit文件绢要,在xcode中點擊commode鍵和N鍵,彈出創(chuàng)建文件選項框中選中Property List拗小,點擊next后就會跳轉(zhuǎn)到設(shè)置plist文件文件名的界面重罪。如下圖所示:
在輸入框中設(shè)定plist文件的名字,回車后就成功創(chuàng)建了一個plist文件哀九。
創(chuàng)建plist文件后根數(shù)據(jù)的格式只能是NSArray和Dictionary格式剿配。我們將Root左邊的三角形點擊朝下后再點擊加號就能創(chuàng)建子數(shù)據(jù)。
我們將Root左邊的三角形點擊朝下后再點擊加號就能創(chuàng)建子數(shù)據(jù)阅束。
如果你選擇的數(shù)據(jù)類型是字典類型呼胚,左邊的Key就代表字典的key值,右邊的Value就代表字典的Value值息裸。中間的Type就代表數(shù)據(jù)類型蝇更。我們在子數(shù)據(jù)中再點擊中間的String,就能看到plist文件能保存的數(shù)據(jù)類型了沪编。
所以plist文件能保存的數(shù)據(jù)類型就是這些,有Dictionary年扩、Array蚁廓、Boolean、Data厨幻、Date相嵌、Number、String幾種類型况脆,所以plist文件在開發(fā)中主要用于保存編程需要的素材數(shù)據(jù)饭宾,在程序?qū)嶋H運行中主要用于保存用戶偏好設(shè)置。不能用于保存View等Object文件格了。
選擇好數(shù)據(jù)類型后我們就可以在文件中書寫數(shù)據(jù)看铆。這里可以保存圖片名稱,我們調(diào)用數(shù)據(jù)時可根據(jù)圖片名稱加載圖片盛末。這點在下面數(shù)據(jù)加載中會說明弹惦。
上面說明的是plist文件的創(chuàng)建和plist文件的基本格式。下面我們來看如何加載數(shù)據(jù)結(jié)構(gòu)復(fù)雜的plist文件
第一種類型是常用的pickView中省市的選擇满败。我們建議看plist文檔時先看數(shù)據(jù)的類型肤频。然后根據(jù)數(shù)據(jù)的類型創(chuàng)建對應(yīng)的變量來接收。例如懶加載中根數(shù)據(jù)類型是Array,接下來是Dictionary類型算墨。字典里面保存了三個數(shù)組宵荒,數(shù)組中分別保存著各自的String數(shù)據(jù)。
加載上面數(shù)據(jù)的方法如下:
NSURL*url = [[NSBundlemainBundle]URLForResource:plistNamewithExtension:nil];
第一層數(shù)據(jù)净嘀,數(shù)據(jù)類型為數(shù)組
NSArray*dataArray= [NSArrayarrayWithContentsOfURL:url];
//獲取第二層的數(shù)據(jù)报咳,數(shù)據(jù)類型為字典
NSDictionary*dic =dataArray[section];
//獲取第三層數(shù)據(jù),數(shù)據(jù)類型數(shù)組
NSArray*items = dic[@"items"];
//獲取第四層數(shù)據(jù)挖藏,數(shù)據(jù)類型字符串
NSString*str= items [1];
```
第二種是社交app中常用的用戶的偏好設(shè)置暑刃,包括組名,組的人數(shù)膜眠,好友的頭像岩臣,好友的昵稱,好友的個性簽名宵膨。這里重點說明這種結(jié)構(gòu)的數(shù)據(jù)如何書寫架谎,和如何加載。
同樣分析上面數(shù)據(jù)辟躏,第一層數(shù)據(jù)為數(shù)組谷扣,第二層數(shù)據(jù)為字典,第三層數(shù)據(jù)為數(shù)組捎琐,第四層數(shù)據(jù)Wie字典会涎,第五層數(shù)據(jù)為字符串裹匙。獲取數(shù)據(jù)方法如下
```
NSURL*url = [[NSBundlemainBundle]URLForResource:plistNamewithExtension:nil];
NSArray*dataArray= [NSArrayarrayWithContentsOfURL:url];
//獲取第二層的數(shù)據(jù),數(shù)據(jù)類型為字典
NSDictionary*dic =dataArray[section];
//獲取第三層數(shù)據(jù)末秃,數(shù)據(jù)類型數(shù)組
NSArray*items = dic[@"friends"];
//獲取第四層數(shù)據(jù)概页,數(shù)據(jù)類型字符串
NSDictionary*dic2= items
[row];
//獲取第四層數(shù)據(jù),數(shù)據(jù)類型字符串
NSString*str= dic2[@"icon”];
最后一種我和TableView結(jié)合起來蛔溃,分析plsit文件和單元格之間的關(guān)系绰沥。同樣篱蝇,加載數(shù)據(jù)如下贺待。
NSURL*url = [[NSBundlemainBundle]URLForResource:plistNamewithExtension:nil];
第一層數(shù)據(jù),數(shù)據(jù)類型為數(shù)組
NSArray*dataArray= [NSArrayarrayWithContentsOfURL:url];
//獲取第二層的數(shù)據(jù)零截,數(shù)據(jù)類型為字典
NSDictionary*dic =dataArray[section];
//獲取第三層數(shù)據(jù)麸塞,數(shù)據(jù)類型數(shù)組
NSArray*items = dic[@"items"];
//獲取第四層數(shù)據(jù),數(shù)據(jù)類型字符串
NSDictionary*dic2= items
[row];
//獲取第四層數(shù)據(jù)涧衙,數(shù)據(jù)類型字符串
NSString*icon= dic2[@"icon"];
上面是介紹的是plist文件的數(shù)據(jù)加載方式哪工,如果你有時間,可以嘗試手寫一個plist文件弧哎,并將數(shù)據(jù)加載到tableView中雁比。