天天看點

iOS - Swift PList 資料存儲前言1、Write 寫入方式2、Plist 檔案的讀寫3、Plist 序列化4、Plist 檔案的使用

直接将資料寫在代碼裡面,不是一種合理的做法。如果資料經常改,就要經常翻開對應的代碼進行修改,造成代碼擴充性低。是以,可以考慮将經常變的資料放在檔案中進行存儲,程式啟動後從檔案中讀取最新的資料。如果要變動資料,直接修改資料檔案即可,不用修改代碼。一般可以使用屬性清單檔案存儲 NSArray 或者 NSDictionary 之類的資料,這種 “屬性清單檔案” 的擴充名是 plist,是以也稱為 “plist 檔案”。 plist 是以 xml 檔案形式存儲的。

如果對象是 NSString、NSArray、NSDictionary、NSData 和 NSNumber 類型,可以用這些類中實作的 writeToFile: atomically: 方法将資料寫到檔案中。

當根據字典建立屬性清單時,字典中的鍵必須都是 NSString 對象。數組中的元素或字典中的值可以是 NSString、NSArray、NSDictionary、NSData、NSDate 和 NSNumber 對象。

iOS 實作的序列化方式的兩種:NSKeyedArchiver,NSPropertyListSerialization。在這兩種序列化方式中,NSData 都是序列化的目标。兩種方式的不同點在于 NSPropertyListSerialization 是針對數組和字典類型的,而 NSKeyedArchiver 是針對對象的。

永久儲存在磁盤中。具體方法為:

第一步:獲得檔案即将儲存的路徑:

使用 C 函數 NSSearchPathForDirectoriesInDomains 來獲得沙盒中目錄的全路徑。該函數有三個參數,目錄類型、domain mask、布爾值。其中布爾值表示是否需要通過 ~ 擴充路徑。而且第一個參數是不變的,即為 NSSearchPathDirectory 。在 iOS 中後兩個參數也是不變的,即為:.DocumentDirectory 和 true。

還有一種方法是使用 NSHomeDirectory 函數獲得 sandbox 的路徑,但是不能在 sandbox 的本檔案層上寫檔案也不能建立目錄,而應該是此基礎上建立一個新的可寫的目錄,例如 Documents, Library 或者 temp 。具體的用法為:

這兩者的差別就是:使用 NSSearchPathForDirectoriesInDomains 比在 NSHomeDirectory 後面添加 Documents 更加安全。因為該檔案目錄可能在未來發送的系統上發生改變。

第二步:生成在該路徑下的檔案:

<code>objc // fileName 就是儲存檔案的檔案名 let FileName = documentPath.stringByAppendingString("/fileName")</code>

第三步:往檔案中寫入資料:

第四步:從檔案中讀出資料:

iOS - Swift PList 資料存儲前言1、Write 寫入方式2、Plist 檔案的讀寫3、Plist 序列化4、Plist 檔案的使用
iOS - Swift PList 資料存儲前言1、Write 寫入方式2、Plist 檔案的讀寫3、Plist 序列化4、Plist 檔案的使用

plist 的檔案名不能叫做 “info”、“Info” 之類的。

添加 plist 等檔案資源的時候,一定要勾選下面的選項。

iOS - Swift PList 資料存儲前言1、Write 寫入方式2、Plist 檔案的讀寫3、Plist 序列化4、Plist 檔案的使用

繼續閱讀