數(shù)據(jù)持久化—屬性列表

本人ios初學(xué)者往衷,為自己學(xué)習(xí)方便阵谚,復(fù)制各位大神的學(xué)習(xí)性文章放在自己簡書里蚕礼,僅作為自己學(xué)習(xí)方便使用,如果作者疑此行為侵權(quán)梢什,請隨時聯(lián)系本人刪除奠蹬,如有共同學(xué)習(xí)者復(fù)制此文章,請注明原出處

在現(xiàn)實的應(yīng)用程序當(dāng)中嗡午,數(shù)據(jù)持久化是一個很重要的功能囤躁。數(shù)據(jù)持久化能夠?qū)⒂脩魧?yīng)用程序的修改很好的保存起來,這樣用戶才能夠看到自己的更改。

將數(shù)據(jù)持久存儲在iOS設(shè)備上有多種方式狸演,目前常用的四種機制分別是:

屬性列表(P)

對象歸檔

SQLite3

Core Data

今天我們將要介紹的是屬性列表的使用:

屬性列表序列化

序列化對象(serialized ovject)是指可以被轉(zhuǎn)換為字節(jié)流以便于存儲到文件中或通過網(wǎng)絡(luò)進行傳輸?shù)膶ο笱陨摺V挥腥缦录蠴C類才能夠用writeToFile(, atomically: )方法將它們存儲到屬性列表中。

NSArray

NSMutableArray

NSDictionary

NSMutableDictionary

NSData

NSMutableData

NSString

NSMutableString

NSNumber

NSDate

使用屬性列表持久保存應(yīng)用程序數(shù)據(jù)宵距,則可用其writeToFile方法來寫入屬性列表腊尚,如下所示:

meArray.writeToFile("output.plist",atomically:true)

因此,屬性列表是最簡單的數(shù)據(jù)存儲方案满哪,一般用于簡單的應(yīng)用程序或者存儲簡單數(shù)據(jù)的復(fù)雜程序中婿斥。

下面讓我們一起來使用屬性列表來創(chuàng)建一個簡單的應(yīng)用程序,這個應(yīng)用程序?qū)捎米钚碌膕wift語言。

實例

創(chuàng)建名為PersistenceDemo的新工程哨鸭,取消Use Core Data,選擇swift語言受扳。

Snip20140925_1.png

創(chuàng)建一個TextField文本框和一個button按鈕

Snip20140925_2.png

將文本框以及按鈕進行輸出關(guān)聯(lián)(按住control鍵將控件拖到ViewControll.swift文件中),文本框選擇Outlet兔跌,按鈕選擇Action勘高,此時,ViewControl.swift中顯示如下:

@IBOutletvartextfield:UITextField!

@IBActionfuncbuttonPush(sender: AnyObject){? ?

}

在ViewControl.swft文件中坟桅,我們添加一個名為filePath的函數(shù):

func filePath(filename:NSString) ->NSString{? ?

var mypaths:NSArray=NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory,NSSearchPathDomainMask.UserDomainMask,true)??

var mydocpath:NSString= mypaths.objectAtIndex(0) asNSStringvar filepath = mydocpath.stringByAppendingPathComponent(filename)

return filepath

}

這個函數(shù)首先是獲取Documents目錄华望,每個程序都有自己的Documents文件夾,并且它們僅僅只能讀寫自己的Documents文件夾中的內(nèi)容仅乓,這也是我們數(shù)據(jù)存儲的地方赖舟。那么如何檢索Documents目錄的完整路徑呢?這里我們使用C函數(shù)NSSearchPathForDirectoriesInDomain()來查找各種目錄夸楣。

這個函數(shù)中的常量NSSearchPathDirectory.DocumentDirectort表明我們正在查找Documents目錄的路徑(NSSearchPathDirectory中還有其他的目錄路徑宾抓,感興趣的讀者可以前去看一看);第二個常量NSSearchPathDomainMask.UserDomainMask表明我們希望將搜索限制在應(yīng)用程序的沙盒內(nèi)豫喧。

雖然這個函數(shù)返回了一個匹配路徑的數(shù)組石洗,但是我們知道數(shù)組中位于索引0處的一定是Documents目錄,因為每個應(yīng)用程序僅有一個Documents目錄紧显,因此只有一個目錄符合指定的檢索條件讲衫。

之后,我們在剛剛檢索到的路徑尾巴后面附上另外一個字符串來創(chuàng)建文件名孵班,這就要使用stringByAppendingPathComponent方法.

完成此調(diào)用之后涉兽,filePath()這個函數(shù)就是返回應(yīng)用程序的Documents目錄中的filename文件的完整路徑了,這個時候我們就可以來創(chuàng)建篙程、讀取文件了枷畏。

那么下面我們來實現(xiàn)存儲數(shù)據(jù)的功能。

在之前創(chuàng)建的按鈕動作函數(shù)中(@IBAction func buttonPush(sender: AnyObject))虱饿,我們添加如下代碼:

var filename:NSString=self.filePath("properties.plist")

NSLog(filename)

var data:NSMutableArray=NSMutableArray()

data.addObject(textfield.text)

data.writeToFile(filename, atomically:true)

filename是用來獲取之前我們創(chuàng)建的filePath函數(shù)所返回的文件路徑拥诡。

然后我們將文本框中的數(shù)據(jù)存儲在一個名為data的多維數(shù)組中丹允,然后將數(shù)據(jù)寫入該文件。是不是很簡單呢袋倔?

那么最后一步雕蔽,實現(xiàn)讀取功能:

在ViewDidLoad()方法中,我們添加如下代碼:

var filename:NSString=self.filePath("properties.plist")

if NSFileManager.defaultManager().fileExistsAtPath(filename) {? ?

var data:NSArray=NSArray(contentsOfFile: filename)? ?

textfield.text= data.objectAtIndex(0) as String

}

首先我們先檢查數(shù)據(jù)文件是否存在宾娜,如果不存在那么就不加載它批狐;如果存在,就用該文件的內(nèi)容實例化數(shù)組前塔,然后將數(shù)組中的對象復(fù)制到文本框中嚣艇。

下面你就可以運行程序,來看一看數(shù)據(jù)存儲帶來的驚喜了华弓!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末食零,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子寂屏,更是在濱河造成了極大的恐慌贰谣,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件迁霎,死亡現(xiàn)場離奇詭異吱抚,居然都是意外死亡,警方通過查閱死者的電腦和手機考廉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門秘豹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人昌粤,你說我怎么就攤上這事既绕。” “怎么了涮坐?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵凄贩,是天一觀的道長。 經(jīng)常有香客問我膊升,道長怎炊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任廓译,我火速辦了婚禮,結(jié)果婚禮上债查,老公的妹妹穿的比我還像新娘非区。我一直安慰自己,他們只是感情好盹廷,可當(dāng)我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布征绸。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪管怠。 梳的紋絲不亂的頭發(fā)上淆衷,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天,我揣著相機與錄音渤弛,去河邊找鬼祝拯。 笑死,一個胖子當(dāng)著我的面吹牛她肯,可吹牛的內(nèi)容都是我干的佳头。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼晴氨,長吁一口氣:“原來是場噩夢啊……” “哼康嘉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起籽前,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤亭珍,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后枝哄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體块蚌,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年膘格,在試婚紗的時候發(fā)現(xiàn)自己被綠了峭范。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡瘪贱,死狀恐怖纱控,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情菜秦,我是刑警寧澤甜害,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站球昨,受9級特大地震影響尔店,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜主慰,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一嚣州、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧共螺,春花似錦该肴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽秦效。三九已至,卻和暖如春涎嚼,著一層夾襖步出監(jiān)牢的瞬間阱州,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工法梯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留苔货,地道東北人。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓鹊汛,卻偏偏與公主長得像蒲赂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子刁憋,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,543評論 2 349

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

  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,131評論 30 470
  • 1滥嘴、 沙盒概念基本介紹 iOS 應(yīng)用程序只能在該 app 的文件系統(tǒng)中讀取。這個默認的 app 文件系統(tǒng)就是我們說...
    Laughingg閱讀 2,643評論 2 10
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理至耻,服務(wù)發(fā)現(xiàn)若皱,斷路器,智...
    卡卡羅2017閱讀 134,633評論 18 139
  • 數(shù)據(jù)持久化的相關(guān)知識 四種將數(shù)據(jù)持久化存儲到iOS文件系統(tǒng)的機制: plist 對象歸檔 iOS的嵌入式關(guān)系數(shù)據(jù)庫...
    melouverrr閱讀 622評論 0 0
  • 27尘颓、ViewController的didReceiveMemoryWarning是在什么時候調(diào)用的走触?默認的操作是...
    煙雨平生花飛舞閱讀 566評論 0 1