Plist文件與數據解析


綜述

  • 初步階段當我們做個需要點數據的練習時(比如購物商品展示),我們可能是將數據直接寫在代碼中,比如說定義一個字符串數組或存放字典的數組。但這其實並不是一種合理的做法。因為如果當數據修改的時候,就要經常翻開對應的代碼進行修改,造成代碼擴展性低。
  • 因此,可以考慮將經常變的數據放在文件中進行存儲,程序啟動后從文件中讀取最新的數據。如果要變動數據,直接修改數據文件即可,這樣就不用修改代碼。
  • 一般可以使用屬性列表文件存儲NSArray或者NSDictionary之類的數據,這種“屬性列表文件”的擴展名是plist,因此也稱為“plist文件”

在Xcode中創建plist文件



  • 為方便測試,編輯plist文件添入一個存放字典的數組

Plist文件的加載

  • 通過代碼來解析Plist文件中的數據
//首先獲得Plist文件的全路徑
NSBundle *bundle = [NSBundle mainBundle];
NSString *path = [bundle pathForResource:@"shops" ofType:@"plist"];
//根據plist根節點數據類型,定義相對應的類型去接收它,這兒_shops是數組類型
_shops = [NSArray arrayWithContentsOfFile:path];

字典轉模型

  • 上面我們通過加載plist文件,獲得了一個存放字典的數組,假設每個字典對應一個商品的數據,這時我們可以通過訪問數組與字典的相關方法去獲取數據
dict[@"name"] = @"apple";
NSString *name = dict[@"name"];
  • 但這樣存在一些不好的地方,比如其中字符串key是需要我們手敲,key容易寫錯,Key如果寫錯了,編譯器不會有任何警告和報錯,造成設錯數據或者取錯數據
  • 實際開發中會使用模型來接收這些數據,模型其實就是指定義一個類,比如商品類,這樣商品名稱name就是它的成員屬性,需要接收數據時 ,就以此類為模板新建實例對象去接收,然后再將這個對象存放到專門的對象數組中
  • 用模型來表示數據會更加專業,模型設置數據和取出數據都是通過它的屬性,屬性名如果寫錯了,編譯器會馬上報錯,因此保證了數據的正確性
  • 使用模型訪問屬性時,編譯器會提供一系列的提示,提高編碼效率
product.name = @"apple";
NSString *name = product.name;
  • 字典轉模型的過程最好封裝在模型內部,提供一個可以傳入字典參數的構造方法
-(instancetype)initWithDict:(NSDictionary *)dict
{
    if (self = [super init]) {
        self.icon = dict[@"icon"];
        self.name = dict[@"title"];
    }
    return self;
}
+(instancetype)productWithDict:(NSDictionary *)dict
{
    return [[self alloc] initWithDict:dict];
}
  • 過程示意圖


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM