iOS的序列化存儲(chǔ)

夫天下未有徒侍人而可自存者。 —— 《李鴻章傳》 梁啟超

  • NSData 與 NSMutableArray

NSData撰糠,NSMutableArray (or NSArray)者酥馍,類也。
兩者皆有 writeToFile: atomically 方法阅酪,但余曾多次嘗試[NSMutableArray writeToFile:filePath atomically:YES];, 然得者皆為fail旨袒。 后發(fā)現(xiàn)NSData的寫入可行,且兩者之間可互相轉(zhuǎn)換遮斥,但轉(zhuǎn)換之法頗為麻煩峦失,于是記錄之,以便日后查詢术吗。

  • NSData 存儲(chǔ)與讀取

NSData 存儲(chǔ)至文件方法:
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:someData];
[data writeToFile:writePath atomically:YES];
文件讀取至NSData方法:
NSData *someData = [[NSData alloc]initWithContentsOfFile:writePath];

  • NSData To NSMutableArray

從NSData中解壓出數(shù)組數(shù)據(jù):
NSMutableArray *array= [NSKeyedUnarchiver unarchiveObjectWithData:someData];

  • NSMutableArray To NSData

把數(shù)組數(shù)據(jù)壓縮至NSData:
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array];

  • Decoder & Coder

如果僅僅是按照上述方式是不能解決問題的尉辑,我們需要一點(diǎn)處理技巧。而這個(gè)技巧就是 NSCoder 君较屿。
當(dāng)NSKeyedUnarchiverNSKeyedArchiver在進(jìn)行解壓縮和壓縮時(shí)隧魄,其實(shí)會(huì)調(diào)用到
*數(shù)組中所包含的類 *
*數(shù)組中所包含的類 *
*數(shù)組中所包含的類 *
(重要的事情說三遍)
中的兩個(gè)函數(shù):- (id)initWithCoder:(NSCoder *)aDecoder- (void)encodeWithCoder:(NSCoder *)aCoder, 假設(shè)你數(shù)組中說包含的類類名是叫aClass,aClass中包含了兩個(gè)變量aImportantStringaMoreImportantString那么我們就要在這個(gè)aClass中實(shí)現(xiàn)這兩個(gè)方法,并對這兩個(gè)變量進(jìn)行編解碼:
static NSString *aImportantStringKey = @"key1";
static NSString *aMoreImportantStringKey = @"key2";

  - (id)initWithCoder:(NSCoder *)aDecoder
  {
      self = [super init];
      if (self) {
           _aImportantString = [aDecoder decodeObjectForKey:aImportantStringKey];
           _aMoreImportantString = [aDecoder decodeObjectForKey:aMoreImportantStringKey];

       }
               return self;
  }

  - (void)encodeWithCoder:(NSCoder *)aCoder
  {
     [aCoder encodeObject:_aImportantString forKey:aImportantStringKey];
     [aCoder encodeObject:_aMoreImportantString forKey:aMoreImportantStringKey];
  }
  • 如何存儲(chǔ)至文件隘蝎?

其實(shí)购啄,這個(gè)問題只要入了門都知道,iOS沙盒的機(jī)制只允許我們在應(yīng)用的Documents目錄下進(jìn)行文件數(shù)據(jù)的存儲(chǔ)嘱么,于是我們需要從bundle中copy或者創(chuàng)建我們的存儲(chǔ)文件狮含,如下:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);NSString * documentDirectory = [paths objectAtIndex:0];
NSString *writePath = [documentDirectory stringByAppendingPathComponent:fileName];

  NSFileManager *fileManager = [NSFileManager defaultManager];

  //判斷文件是否存在
  if (![fileManager fileExistsAtPath:writePath]){
     //create the file
     [fileManager createFileAtPath:writePath contents:nil attributes:nil];

   }else {
    
    //read the data
     NSData *someData = [[NSData alloc]initWithContentsOfFile:writePath];
     NSMutableArray *array= [NSKeyedUnarchiver unarchiveObjectWithData:someData];
    
   }
  • 結(jié)語

以上將數(shù)據(jù)序列化為Data存儲(chǔ)的方法不僅使用于NSMutableArray類或Array類,其它數(shù)據(jù)類型也適用。因?yàn)橹岸啻卧嚵薔SMutableArray寫入不成功(如果是我寫法有問題的話几迄,請知情者指出蔚龙,感激不盡!)映胁,所以記錄之木羹,希望后來者不要犯同樣的錯(cuò)誤。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末解孙,一起剝皮案震驚了整個(gè)濱河市坑填,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌弛姜,老刑警劉巖脐瑰,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異娱据,居然都是意外死亡蚪黑,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門中剩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來忌穿,“玉大人,你說我怎么就攤上這事结啼÷咏#” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵郊愧,是天一觀的道長朴译。 經(jīng)常有香客問我,道長属铁,這世上最難降的妖魔是什么眠寿? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮焦蘑,結(jié)果婚禮上盯拱,老公的妹妹穿的比我還像新娘。我一直安慰自己例嘱,他們只是感情好狡逢,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拼卵,像睡著了一般奢浑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上腋腮,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天雀彼,我揣著相機(jī)與錄音壤蚜,去河邊找鬼。 笑死详羡,一個(gè)胖子當(dāng)著我的面吹牛仍律,可吹牛的內(nèi)容都是我干的嘿悬。 我是一名探鬼主播实柠,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼善涨!你這毒婦竟也來了窒盐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤钢拧,失蹤者是張志新(化名)和其女友劉穎蟹漓,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體源内,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡葡粒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了膜钓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嗽交。...
    茶點(diǎn)故事閱讀 39,722評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖颂斜,靈堂內(nèi)的尸體忽然破棺而出夫壁,到底是詐尸還是另有隱情,我是刑警寧澤沃疮,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布盒让,位于F島的核電站,受9級特大地震影響司蔬,放射性物質(zhì)發(fā)生泄漏邑茄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一俊啼、第九天 我趴在偏房一處隱蔽的房頂上張望肺缕。 院中可真熱鬧,春花似錦吨些、人聲如沸搓谆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泉手。三九已至,卻和暖如春偶器,著一層夾襖步出監(jiān)牢的瞬間斩萌,已是汗流浹背缝裤。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留颊郎,地道東北人憋飞。 一個(gè)月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像姆吭,于是被迫代替她去往敵國和親榛做。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 大綱 一内狸、文件管理器項(xiàng)目:FileManager0412NSFileManager:文件管理器(單例類)作用:管理...
    AsaGuo閱讀 306評論 0 0
  • 在程序開發(fā)中检眯,數(shù)據(jù)層永遠(yuǎn)是程序的核心結(jié)構(gòu)之一。我們將現(xiàn)實(shí)事物進(jìn)行抽象昆淡,使之變成一個(gè)個(gè)數(shù)據(jù)锰瘸。對這些數(shù)據(jù)的加工處理是代...
    帥不過oneS閱讀 600評論 0 1
  • iOS 開発の結(jié)構(gòu) 畫面 UI UIWebview [[UIApplication sharedApplicati...
    RencaiXiong閱讀 583評論 0 0
  • 面向?qū)ο笕笾е庋b:就是把相關(guān)的數(shù)據(jù)和代碼結(jié)合成一個(gè)有機(jī)的整體,形成數(shù)據(jù)和操作代碼的封裝體昂灵,對外只提供一個(gè)可以控...
    WangDavid閱讀 1,682評論 0 2
  • 下面是我最近兩年學(xué)習(xí)OC中的一些基礎(chǔ)知識(shí)避凝,對于學(xué)習(xí)OC基礎(chǔ)知識(shí)的人可能有些幫助,拿出來分享一下眨补,還是那句話不喜勿噴...
    小小趙紙農(nóng)閱讀 2,583評論 1 7