不得不說俩滥,這個(gè)系列的視頻錄制的一點(diǎn)都不友善嘉蕾,我嘗試看了好多次,也沒有看明白霜旧,模模糊糊的感覺一點(diǎn)也不好错忱。不知道是老師的問題還是課程設(shè)置的問題」揖荩總是不知所以然的狀態(tài)以清,我看到這里的時(shí)候都差點(diǎn)要放棄學(xué)習(xí)iOS開發(fā)了,還好崎逃,放棄一個(gè)周之后又重新拾起來了掷倔。不過我用其他學(xué)校的數(shù)據(jù)存儲(chǔ)視頻代替了麥子學(xué)院數(shù)據(jù)存儲(chǔ)視頻了。沒辦法个绍,麥子學(xué)院的數(shù)據(jù)存儲(chǔ)有點(diǎn)不適合我勒葱。浪汪。
A.七種方式??實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)
在IOS中,數(shù)據(jù)存儲(chǔ)的方式有以下七個(gè)方法:
1.NSUerDefaults
2. Setting Bundle
3.通用文件存儲(chǔ)
4.對(duì)象歸檔
5.SQLite
6.Core Data
7.iCloud
B.五種數(shù)據(jù)存儲(chǔ)的基本操作
數(shù)據(jù)存儲(chǔ)的基本操作凛虽,也就說不管你使用什么方法死遭,這個(gè)方法都需要能滿足下面這5個(gè)基本操作:
1.保存
2.更新
3.刪除
4.加載
5.查詢
C.應(yīng)用程序沙盒
1.了解應(yīng)用程序沙盒。
開始學(xué)習(xí)數(shù)據(jù)存儲(chǔ)方式之前凯旋,先需要了解應(yīng)用程序沙盒呀潭。
因?yàn)镮OS對(duì)數(shù)據(jù)存儲(chǔ)有一定的要求,而且會(huì)進(jìn)行權(quán)限檢測(cè)至非,APP只能在應(yīng)用程序沙盒中讀取文件蜗侈,這要求我們?cè)诰幊虝r(shí),需要的文件都要保存在沙盒內(nèi)部睡蟋。
2.應(yīng)用程序沙盒里有四個(gè)文件:
1)MyApp.app: 存放App Bundle和APP的可執(zhí)行代碼。
2)Documents:存放重要的用戶文檔和應(yīng)用數(shù)據(jù)文件枷颊。注意:A-1?NSUerDefaults中的首選項(xiàng)數(shù)據(jù)不在其中
3)Library:存放系統(tǒng)文件戳杀。
4)tmp:臨時(shí)的數(shù)據(jù)。不要存放重要的文件夭苗。
3.學(xué)習(xí)通過iphone模擬器的目錄來了解APP的C-2應(yīng)用程序沙盒的四個(gè)目錄信卡。
4.學(xué)習(xí)通過代碼來獲取文件目錄。
1)C語言的方法
var path = NSSearchPathForDirectoriesInDomains ( NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true ) //注意:這里最后寫true表示顯示完整路徑题造,false只顯示最后一個(gè)文件夾的名字
var documentsDirectory =path[0] as String?//注意:path[0]零表示的是D-2-2)?中的Documents
printlin(documentsDirectory)
2)專門給IOS準(zhǔn)備的方法
var fileManager = NSFileManager.defaultManager()
var documentDirectorWithManager = fileManager.URLsForDirectory(NSSearchPathDirectory.DocumentDirectory, inDomains: NSSearchPathDomainMask.UserDomainMask)
println(documentDirectorWithManager)
D.NSUserDefaults
數(shù)據(jù)存儲(chǔ)的第一種方法傍菇,即A-1。NSUserDefaults往往用在設(shè)置中(當(dāng)然界赔,還需要和A-2組合使用才能實(shí)現(xiàn))丢习,當(dāng)我們開發(fā)的APP需要開發(fā)系統(tǒng)設(shè)置這個(gè)功能時(shí),可以采用這種存儲(chǔ)方式淮悼。
是單例咐低,整個(gè)程序中只有一個(gè)實(shí)例對(duì)象。
適合存儲(chǔ)輕量級(jí)的數(shù)據(jù)袜腥。
可以存儲(chǔ)的類型有限:
NSData
NSString(String)
NSNumber(Int,Double,Float)
NSDate(Array)
NSDictionary(Dictionary)
Bool
也是因?yàn)檫@些特性见擦,決定了NSUserDefaults的使用場(chǎng)景。
關(guān)鍵命令:
var userDefaults = NSUserDefaults.standardUserDefaults()
var text = dataInputTextField.text
userDefaults.setObject(text, forKey: "text1”) 數(shù)據(jù)存入格式set多種可選擇的格式羹令。set作為前綴
userDefaults.synchronize() 存入數(shù)據(jù)生效
var textget = userDefaults.stringForKey("text1”) ?讀取以前存入的數(shù)據(jù)鲤屡,可選擇多種格式。ForKey作為后綴福侈。
E.Setting Bundle
數(shù)據(jù)存儲(chǔ)的第二種方法酒来,即A-2。往往和A-1組合使用癌刽,完成APP的設(shè)置界面的功能開發(fā)役首。一般setting bundle和NSUserDefaults結(jié)合起來使用尝丐,才能完成設(shè)置這個(gè)功能的開發(fā)。這個(gè)設(shè)置是iPhone的設(shè)置按鈕衡奥,不是APP內(nèi)部的那個(gè)設(shè)置爹袁。
F.通用文件存儲(chǔ)
通用文件存儲(chǔ)可以用來存儲(chǔ)序列化對(duì)象(serialized object)。序列化對(duì)象(serialized object)是指可以倍轉(zhuǎn)換為字節(jié)以便于存儲(chǔ)到文件中或者通過網(wǎng)絡(luò)進(jìn)行傳輸?shù)膶?duì)象矮固。不過目前只能將某些對(duì)象放置到某些集合類中然后存儲(chǔ)到通用文件中去失息,不是所有的對(duì)象都可以存儲(chǔ)到通用文件當(dāng)中去的。
可以進(jìn)行對(duì)象序列化的類有:
· NSData
· NSString(String)
· NSNumber(Int, Double,Float)
· NSDate
· NSArray(Array)
· NSDictionary(Dictionary)
G.對(duì)象歸檔
對(duì)象歸檔(Archive):將對(duì)象轉(zhuǎn)換成可以寫入到文件中的格式档址,通常是以一種不可讀的方式進(jìn)行保存盹兢。
對(duì)象反歸檔(Unarchive):將數(shù)據(jù)從文件中讀出并自動(dòng)重建對(duì)象。
1.需要繼承NSObject守伸、NSCoding绎秒。同時(shí)需要寫一下代碼:
H.SQLite
I.Core Data
蘋果公司提供的關(guān)系型數(shù)據(jù)庫。
Entities實(shí)體尼摹。命名的時(shí)候首字母要大寫见芹,首字母之前不能有符合數(shù)字。
Attributes 屬性
Relationships 關(guān)系:一對(duì)一 to one蠢涝,一對(duì)多to many玄呛,多對(duì)一,多對(duì)多
Fetched Properties 提取屬性(一般不常用)
control拖拽可以建立關(guān)系
J.iCloud
對(duì)此專題視頻課程設(shè)置的疑問:
1.為什么要學(xué)習(xí)這兩個(gè)個(gè)代碼和二?有什么作用嗎徘铝?在什么情況下會(huì)使用這個(gè)方法?如果告知原因惯吕,對(duì)理解掌握這個(gè)方法更有幫助的惕它。
2.如果這兩個(gè)代碼的作用是通過代碼來找到Documents文件夾,那么這個(gè)文件夾是應(yīng)用程序沙盒中的Documents文件夾嗎混埠?
那應(yīng)用程序沙盒中其他的三個(gè)文件夾(MyApp.app;Library,tmp)如何獲取呢怠缸?為什么不講呢?是因?yàn)椴恢匾獑幔?/p>
3.我嘗試著把var documentsDirectory =path[0] as String? 中的數(shù)字零改成其他數(shù)字钳宪,但是都說是超出數(shù)組范圍了揭北,那么這個(gè)數(shù)組只有零一個(gè)下標(biāo)嗎?