日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

iOS - OC PList数据存储

發(fā)布時(shí)間:2025/1/21 编程问答 68 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS - OC PList数据存储 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

  • 直接將數(shù)據(jù)寫(xiě)在代碼里面,不是一種合理的做法。如果數(shù)據(jù)經(jīng)常改,就要經(jīng)常翻開(kāi)對(duì)應(yīng)的代碼進(jìn)行修改,造成代碼擴(kuò)展性低。因此,可以考慮將經(jīng)常變的數(shù)據(jù)放在文件中進(jìn)行存儲(chǔ),程序啟動(dòng)后從文件中讀取最新的數(shù)據(jù)。如果要變動(dòng)數(shù)據(jù),直接修改數(shù)據(jù)文件即可,不用修改代碼。一般可以使用屬性列表文件存儲(chǔ) NSArray 或者 NSDictionary 之類(lèi)的數(shù)據(jù),這種 “屬性列表文件” 的擴(kuò)展名是 plist,因此也稱(chēng)為 “plist 文件”。 plist 是以 xml 文件形式存儲(chǔ)的。

  • 如果對(duì)象是 NSString、NSArray、NSDictionary、NSData 和 NSNumber 類(lèi)型,可以用這些類(lèi)中實(shí)現(xiàn)的 writeToFile: atomically: 方法將數(shù)據(jù)寫(xiě)到文件中。

  • 當(dāng)根據(jù)字典創(chuàng)建屬性列表時(shí),字典中的鍵必須都是 NSString 對(duì)象。數(shù)組中的元素或字典中的值可以是 NSString、NSArray、NSDictionary、NSData、NSDate 和 NSNumber 對(duì)象。

  • iOS 實(shí)現(xiàn)的序列化方式的兩種:NSKeyedArchiver,NSPropertyListSerialization。在這兩種序列化方式中,NSData 都是序列化的目標(biāo)。兩種方式的不同點(diǎn)在于 NSPropertyListSerialization 是針對(duì)數(shù)組和字典類(lèi)型的,而 NSKeyedArchiver 是針對(duì)對(duì)象的。

1、Write 寫(xiě)入方式

  • 永久保存在磁盤(pán)中。具體方法為:

    • 第一步:獲得文件即將保存的路徑:

      • 使用 C 函數(shù) NSSearchPathForDirectoriesInDomains 來(lái)獲得沙盒中目錄的全路徑。該函數(shù)有三個(gè)參數(shù),目錄類(lèi)型、domain mask、布爾值。其中布爾值表示是否需要通過(guò) ~ 擴(kuò)展路徑。而且第一個(gè)參數(shù)是不變的,即為 NSSearchPathDirectory 。在 iOS 中后兩個(gè)參數(shù)也是不變的,即為:NSUserDomainMask 和 YES。

        NSString *documentPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
      • 還有一種方法是使用 NSHomeDirectory 函數(shù)獲得 sandbox 的路徑,但是不能在 sandbox 的本文件層上寫(xiě)文件也不能創(chuàng)建目錄,而應(yīng)該是此基礎(chǔ)上創(chuàng)建一個(gè)新的可寫(xiě)的目錄,例如 Documents, Library 或者 temp 。具體的用法為:

        // 將 Documents 添加到 sandbox 路徑上NSString *documentPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
      • 這兩者的區(qū)別就是:使用 NSSearchPathForDirectoriesInDomains 比在 NSHomeDirectory 后面添加 Documents 更加安全。因?yàn)樵撐募夸浛赡茉谖磥?lái)發(fā)送的系統(tǒng)上發(fā)生改變。

    • 第二步:生成在該路徑下的文件:

      // fileName 就是保存文件的文件名NSString *FileName = [documentPath stringByAppendingPathComponent:@"fileName"];
    • 第三步:往文件中寫(xiě)入數(shù)據(jù):

      // 將 NSData 類(lèi)型對(duì)象 data 寫(xiě)入文件,文件名為 FileName[data writeToFile:FileName atomically:YES];
    • 第四步:從文件中讀出數(shù)據(jù):

      // 從 FileName 中讀取出數(shù)據(jù)NSData *data = [NSData dataWithContentsOfFile:FileName options:0 error:NULL];

2、Plist 文件的讀寫(xiě)

NSString *arrayPath = [NSHomeDirectory() stringByAppendingString:@"/Desktop/arrayToPList.plist"];NSString *dictionaryPath = [NSHomeDirectory() stringByAppendingString:@"/Desktop/dictionaryToPList.plist"];// 待寫(xiě)入數(shù)據(jù)NSArray *array = @[@"bei", @"jing", @"huan", @"ying", @"nin"];// 待寫(xiě)入數(shù)據(jù)NSDictionary *dictionary = @{@"name":@"chen chao", @"age":@"18", @"info":@"Good Teacher"};// 寫(xiě) Plist 文件// 數(shù)組寫(xiě)入 plist 文件BOOL bl1 = [array writeToFile:arrayPath atomically:YES];// 字典寫(xiě)入 plist 文件BOOL bl2 = [dictionary writeToFile:dictionaryPath atomically:YES];// 讀 Plist 文件NSArray *arrayFromPlist = [NSArray arrayWithContentsOfFile:arrayPath];NSDictionary *dicFromPList = [NSDictionary dictionaryWithContentsOfFile:dictionaryPath];

3、Plist 序列化

NSString *arrayPath = [NSHomeDirectory() stringByAppendingString:@"/Desktop/arrayPropertyList.plist"];NSString *dictionaryPath = [NSHomeDirectory() stringByAppendingString:@"/Desktop/dictionaryPropertyList.plist"];// 待寫(xiě)入數(shù)據(jù)NSArray *array = @[@"bei", @"jing", @"huan", @"ying", @"nin"]; // 待寫(xiě)入數(shù)據(jù)NSDictionary *dictionary = @{@"name":@"chen chao", @"age":@"18", @"info":@"Good Teacher"}; // 序列化,將數(shù)據(jù)轉(zhuǎn)換成 XML 格式的文件NSData *arrayData = [NSPropertyListSerialization dataWithPropertyList:array format:NSPropertyListXMLFormat_v1_0 options:1 error:nil];NSData *dictionaryData = [NSPropertyListSerialization dataWithPropertyList:dictionary format:NSPropertyListXMLFormat_v1_0 options:1 error:nil];// 輸出到 .txt 格式文件中BOOL bl1 = [arrayData writeToFile:arrayPath atomically:YES]; BOOL bl2 = [dictionaryData writeToFile:dictionaryPath atomically:YES];// 反序列化NSArray *arrayFromeFile = [NSArray arrayWithContentsOfFile:arrayPath];NSDictionary *dicitionaryFromeFile = [NSDictionary dictionaryWithContentsOfFile:dictionaryPath];

4、Plist 文件的使用

4.1 Plist 文件的創(chuàng)建

4.2 Plist 文件的解析

// 獲得 Plist 文件的全路徑NSString *path = [[NSBundle mainBundle] pathForResource:@"shops" ofType:@"plist"];// 加載 plist 文件NSArray *shops = [NSArray arrayWithContentsOfFile:path];

4.3 Plist 文件的解析過(guò)程

4.4 Plist 的使用注意

  • plist 的文件名不能叫做 “info”、“Info” 之類(lèi)的。

  • 添加 plist 等文件資源的時(shí)候,一定要勾選下面的選項(xiàng)。

轉(zhuǎn)載于:https://www.cnblogs.com/QianChia/p/5782843.html

總結(jié)

以上是生活随笔為你收集整理的iOS - OC PList数据存储的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。