前面我們已經創建了一個簡單的表視圖應用程序,顯示菜譜列表。分析一下代碼,你會發現所有的菜譜都應編碼在源代碼中。之前,我們只考慮讓事情變得簡單,并著重演示如何創建一個 UITableView 應用程序。然而,將所有元素比硬編碼在
代碼中并不是推薦的方法。
?
在真實的App開發中,我們常常將這些靜態元素存放在外部(如菜譜列表)文件或數據庫或其它地方。在IOS編程中,有一種類型的文件,成為 Property List. 這一類型的文件通常在Mac OS 和 iOS中發現,用來存放簡單的結構數據(如應用程序設置)。
?
下面,我們來更新之前的Simple Table 應用程序,使用 Property ?List.
?
我們將討論如下一些主題:
1)轉化靜態數組中的表數據為 Property List
?
2)如何讀取 Property List
?
1.為什么外部化表數據?
?
將靜態數據從代碼分離出來是一個很好的做法。為什么呢? 將表數據置于外部數據源的優點是什么呢?
?
假如讓你添加50多個菜譜到Simple Table 應用程序中,你需要返回源代碼,將新的菜譜添加到初始化代碼中。
?
這種做法并沒有任何問題,但是,編寫這些代碼并不簡單,必須要嚴格遵循Object-C語法。更改代碼可能會引起其他錯誤,這并不是我們期望的。
?
顯然,最好是將數據和代碼邏輯分離,像下面這一將表數據存放起來不是更好嗎?
?
實際上,可能并不是你提供表數據(本例子是菜譜列表數據),而是其他不懂iOS編程經驗的人提供這些數據。當我們將數據放置在外部文件,這樣容易讀寫,且更容易理解。
?
隨著更深入學習,我們將了解如何將數據存放在Server端(或者所謂的云)
?
App中所有數據將根據需要從Server端讀取。目前,這一提供了很大的好處,因為對數據的任何更新都需要你重構App,并提交給App審批。通過將數據分離存放在云(Cloud)中,你可以隨時更新數據,而不是更新你的App。
?
現在,我們來看看如何使用Property List.
?
2. Property List 是什么?
?
Property List 提供了一個方便的方法來存放簡單的結構數據,通常為XML格式。
?
你不能使用Property List存放所有類型的數據,Property List中存放的數據類型是有限的,包括數組(Array)、字典(Dictionary)、字符串(String)等等。 關于支持類型的更詳細信息,可參考Property List文檔。
?
3.這是存放表數據的最好方式嗎?
?
不是,絕對不是,我們使用Property List 來演示如何在外部文件存放表數據,這僅僅是一個例子。
?
4.轉換表數據為Property List
?
首先,右擊SimpleTable 文件夾,選擇New File..., 接著選擇iOS模板下面的Resource,最后選擇Property List, 并點擊next繼續。
?
在彈出窗口中,使用recipes 作為文件名。確認之后,Xcode將自動創建Property List文件。
?
我們需要在PropertyList 中添加3個數組數據,我們在Property List中添加3行,類型為Array。分別命名Key值為:
RecipeName,Thumbnail和PrepTime.
?
Key值作為識別碼,在后面的代碼中用來獲取相應的數組。
?
點擊展開圖標,并點擊 + 圖標,添加新的 item ,實現數組中添加數據。完成后的Property List 如下圖所示:
?
附件提供recipes.plist 文件下載
?
5.在Object-C中加載Property List
?
接著,我們更新代碼,從上一步創建的Property List文件中加載菜譜列表,從Property List中讀取內容相當簡單。 iOS SDK已經有內置的方法來處理該文件的讀取操作。
?
替換代碼如下:
?
?
? ?? //Find out the path of recipes.plist
? ? NSString *path = [[ NSBundle mainBundle ] pathForResource : @"recipes" ofType : @"plist" ];
?
? ? //Load the file content and read the data into arrays
?
? ? NSDictionary *dict = [[ NSDictionary alloc ] initWithContentsOfFile :path];
? ? tableData = [dict objectForKey : @"RecipeName" ];
? ? thumbnails = [dict objectForKey : @"Thumbnail" ];
? ? time = [dict objectForKey : @"PrepTime" ];
? ? //Initialize prepTime
? ? prepTime = @"PrepTime:" ;
?
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
