天天看點

iOS plist 檔案的讀寫

plist 檔案全稱:Property List. 屬性清單檔案,它是一種用來存儲串行化後的對象的檔案。屬性清單檔案的擴充名為 .plist ,是以通常被稱為 plist 檔案。檔案是 XML 格式的。

plist 檔案通常用于儲存使用者設定,也可以用于存儲捆綁的資訊。

例如:

iOS plist 檔案的讀寫

1. 建立 plist 檔案

建立方式:

File -> New -> File

command + N

, 如圖所示:

iOS plist 檔案的讀寫

建立一個名為 TestPList.plist 的檔案。

打開該檔案,在 Root 目錄下右鍵選擇 Add Row(或點選加号)添加資料,并在 Type 中選擇類型為 Dictionary。點加号添加這個 Dictionary 下的資料。添加完 Key 之後在後面添加 Value 的值。建立好的 plist 檔案示例如下:

iOS plist 檔案的讀寫

在建立完的 plist 檔案右鍵,用 Source Code 打開,代碼如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>item-0</key>
    <dict>
        <key>Jack</key>
        <string>25</string>
    </dict>
    <key>item-1</key>
    <dict>
        <key>中國工商銀行</key>
        <string>ICBC</string>
        <key>中國銀行</key>
        <string>BOC</string>
    </dict>
    <key>item-2</key>
    <dict>
        <key>中國農業銀行</key>
        <string>ABC</string>
        <key>中國建設銀行</key>
        <string>CCB</string>
    </dict>
</dict>
</plist>
           

3. 讀取 plist 檔案的資料

讀取 plist 代碼如下所示:

- (void)viewDidLoad {
    [super viewDidLoad];

    // 讀取 plist 檔案
    NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"TestPList" ofType:@"plist"];
    NSMutableDictionary *data = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];
    NSLog(@"-->%@", data);
}
           

列印結果:

test[:] -->{
    "item-0" =     {
        Jack = ;
    };
    "item-1" =     {
        "\U4e2d\U56fd\U5de5\U5546\U94f6\U884c" = ICBC;
        "\U4e2d\U56fd\U94f6\U884c" = BOC;
    };
    "item-2" =     {
        "\U4e2d\U56fd\U519c\U4e1a\U94f6\U884c" = ABC;
        "\U4e2d\U56fd\U5efa\U8bbe\U94f6\U884c" = CCB;
    };
}
           

這樣就把資料讀出來了(PS: 中文會以 Unicode 編碼顯示)。

4. 建立和寫入 plist 檔案

在開發過程中,有時候需要把程式的一些配置儲存下來,或者遊戲資料等等。這時候需要寫入 plist 資料。寫入的 plist 檔案會生成在對應程式的沙盒目錄裡。

接着上面讀取 plist 資料的代碼,加入了寫入資料的代碼,

- (void)viewDidLoad {
    [super viewDidLoad];

    // 讀取 plist 檔案
    NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"TestPList" ofType:@"plist"];
    NSMutableDictionary *data = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];
    NSLog(@"-->%@", data);

    // 寫入 plist 檔案
    [data setObject:@"add something" forKey:@"add"];

    // 添加一項内容
    [data setObject:@"add some content" forKey:@"c_key"];

    // 擷取應用程式沙盒的Documents目錄
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *plistPath1 = [paths objectAtIndex:];

    // 得到完整的檔案名
    NSString *filename = [plistPath1 stringByAppendingPathComponent:@"test.plist"];
    // 輸入寫入
    [data writeToFile:filename atomically:YES];
    NSLog(@"filename-->%@", filename);

    // 那怎麼證明我的資料寫入了呢?讀出來看看
    NSMutableDictionary *data1 = [[NSMutableDictionary alloc] initWithContentsOfFile:filename];
    NSLog(@"%@", data1);
}
           

可以看到内容已經添加(這裡還列印出了完整的檔案名)。

列印結果:

iOS plist 檔案的讀寫

這裡 Xcode 版本為 7.0

原文連結:iOS學習之 plist檔案的讀寫