Swift-Core Data(1) 基礎(chǔ)存儲(chǔ)

Swift-Core Data(1) 基礎(chǔ)存儲(chǔ)
Swift-Core Data(2) 基礎(chǔ)存儲(chǔ)

最近有做個(gè)小 demo,有使用到 Core Data,才開(kāi)始研究一下,把感覺(jué)比較有用的資料整理了一下炉爆。

1. Core Data 架構(gòu)

一個(gè)基本的 Core Data 棧由四個(gè)主要部分組成:

1.1NSManagedObjectContext (托管對(duì)象上下文 )

日常打交道的都是這個(gè)惑畴。其他三個(gè)在數(shù)據(jù)遷移的時(shí)候才會(huì)看到。
作用:插入數(shù)據(jù)匾嘱,查詢數(shù)據(jù)谈况,刪除數(shù)據(jù)

1.2NSManagedObject(托管對(duì)象)

是我們的數(shù)據(jù)模型勺美,也就是我們存儲(chǔ)的對(duì)象。這些對(duì)象都保存在NSManagedObjectContext中碑韵,每個(gè)存儲(chǔ)對(duì)象都知道自己對(duì)應(yīng)哪個(gè)上下文励烦。
作用:添加實(shí)體的屬性,建立屬性之間的關(guān)系

1.3NSPersistenStoreCoordinator (持久化存儲(chǔ)協(xié)調(diào)器)

是模型和存儲(chǔ)數(shù)據(jù)庫(kù)之間的橋梁泼诱,負(fù)責(zé)兩者之間最復(fù)雜的細(xì)節(jié)隱藏坛掠。
作用:設(shè)置數(shù)據(jù)存儲(chǔ)的名字,位置治筒,存儲(chǔ)方式屉栓,和存儲(chǔ)時(shí)機(jī)

1.4 NSPersistentStore(持久化存儲(chǔ))

Core Data 提供了四種類型,SQLite, Binary, XML, and In-Memory。在iOS的XML存儲(chǔ)不可用,這些都是在持久存儲(chǔ)的特征描述耸袜。所有的數(shù)據(jù)都存在這里友多。

  • XML是將數(shù)據(jù)存為XML文件,只在 OS X 平臺(tái)下可用堤框。
  • Binary的方法是存為一個(gè)Data文件域滥。
  • InMemory的方式是不會(huì)對(duì)數(shù)據(jù)進(jìn)行真正意義上的持久化纵柿,全部存儲(chǔ)在內(nèi)存中,當(dāng)應(yīng)用程序退出時(shí)启绰,數(shù)據(jù)也就消失了昂儒。
Core Data 架構(gòu).png

2.創(chuàng)建一個(gè)Core Data Demo

1.創(chuàng)建項(xiàng)目

創(chuàng)建 CoreData Demo.png

在 Xcode 創(chuàng)建工程時(shí),提供了創(chuàng)建 CoreData 的模板委可,只需要我們?cè)趧?chuàng)建時(shí)渊跋,勾選 CoreData 選項(xiàng),Xcode 就會(huì)自動(dòng)創(chuàng)建出數(shù)據(jù)模型文件着倾。

這個(gè)Demo用這個(gè)創(chuàng)建拾酝,只是簡(jiǎn)單的開(kāi)始了解 Coare Data。在今后的工作中不建議使用這種方式創(chuàng)建卡者,通常情況下我們都會(huì)把生成的模板代碼都刪除蒿囤,自己手寫代碼。

2. 創(chuàng)建本地?cái)?shù)據(jù)庫(kù)模板

數(shù)據(jù)庫(kù)模板.png

項(xiàng)目創(chuàng)建好崇决,我們可以看到有一個(gè).xcdatamodeld文件材诽,這個(gè)就是咱們的數(shù)據(jù)庫(kù)模板。


創(chuàng)建實(shí)體.png

然后點(diǎn)擊.xcdatamodeld文件嗽桩,添加實(shí)體岳守,修改實(shí)體名字(必須大寫字母開(kāi)頭)凄敢,為實(shí)體添加屬性(屬性必須以小寫字母開(kāi)頭)

對(duì)于每一個(gè)實(shí)體碌冶,build之后Xcode都會(huì)自動(dòng)幫我們生成相應(yīng)的實(shí)體類代碼,如果不想要自動(dòng)生成涝缝,可以選擇手動(dòng)生成扑庞,并且可以選擇手動(dòng)生成的語(yǔ)言,這里我們選擇 Manual/None


手動(dòng)生成的語(yǔ)言.png

手動(dòng)和自動(dòng)的選擇.png

手動(dòng)生成實(shí)體類代碼的步驟:選擇xcdatamodeld文件-->editor-->Create NSManagedObject SubClass,然后按提示點(diǎn)擊就行了。最終你會(huì)在項(xiàng)目文件里面看到新生成的實(shí)體類代碼文件


Create NSManagedObject SubClass.png

之后按照提示走就可以拒逮。創(chuàng)建完成后得結(jié)果:


結(jié)果.png

接下來(lái)就可以簡(jiǎn)單的使用了

3. 使用

這里只做了簡(jiǎn)單功能的使用,存儲(chǔ)數(shù)據(jù)和查看數(shù)據(jù),效果圖如下:
Simulator Screen Shot - iPhone 8 Plus - 2017-12-19 at 08.42.34.png

3.1 存儲(chǔ)數(shù)據(jù)

存儲(chǔ)數(shù)據(jù)需要四步
1).獲取總代理和托管對(duì)象托管對(duì)象上下文
2).創(chuàng)建實(shí)體,獲取托管對(duì)象
3).將數(shù)據(jù)賦值給托管對(duì)象
4).保存到數(shù)據(jù)庫(kù)

        //第一步:獲取總代理和托管對(duì)象托管對(duì)象上下文
        let app = UIApplication.shared.delegate as? AppDelegate
        let context = app?.persistentContainer.viewContext
        //第二步:創(chuàng)建實(shí)體,獲取托管對(duì)象
        let entity = NSEntityDescription.entity(forEntityName: "Student", in: context!)
        let student = NSManagedObject(entity: entity!, insertInto: context) as! Student
        //第三步:將數(shù)據(jù)賦值給托管對(duì)象
        student.name = self.nameTF.text
        student.age = Int32(self.ageTF.text!)!
        //第四步:保存到數(shù)據(jù)庫(kù)罐氨。如果保存失敗,進(jìn)行處理
        do {
            try context?.save()
        } catch  {
            fatalError("無(wú)法保存")
        }

3.2 查詢數(shù)據(jù)

查詢數(shù)據(jù)需要三步
1).獲取總代理和托管對(duì)象托管對(duì)象上下文
2).建立一個(gè)獲取的請(qǐng)求
3).執(zhí)行請(qǐng)求

        //第一步:獲取總代理和托管對(duì)象托管對(duì)象上下文
        let app = UIApplication.shared.delegate as? AppDelegate
        let context = app?.persistentContainer.viewContext
        //第二步:建立一個(gè)獲取的請(qǐng)求
        let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Student")
        
        //第三步:執(zhí)行請(qǐng)求
        do {
            //[Student] 這個(gè)位置填的是獲取對(duì)象的類型
            //也可以使用 基類 NSManagedObject
            let fetch = try context?.fetch(fetchRequest) as? [Student]
            var resultStr:String = "查詢結(jié)果\n"
            for student in fetch! {
                resultStr.append("name:\(student.name!)   age:\(student.age) \n")
            }
            self.resultTextView.text = resultStr
        } catch  {
            fatalError("無(wú)法查詢")
        }

這樣簡(jiǎn)單的存儲(chǔ)和查詢功能就完成了 .GitHub Demo

參考

Core Data 概述
Core Data 生成代碼 編譯錯(cuò)誤

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末滩援,一起剝皮案震驚了整個(gè)濱河市栅隐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌玩徊,老刑警劉巖租悄,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異恩袱,居然都是意外死亡泣棋,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門畔塔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)潭辈,“玉大人鸯屿,你說(shuō)我怎么就攤上這事“迅遥” “怎么了寄摆?”我有些...
    開(kāi)封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)技竟。 經(jīng)常有香客問(wèn)我冰肴,道長(zhǎng),這世上最難降的妖魔是什么榔组? 我笑而不...
    開(kāi)封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任熙尉,我火速辦了婚禮,結(jié)果婚禮上搓扯,老公的妹妹穿的比我還像新娘检痰。我一直安慰自己,他們只是感情好锨推,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布铅歼。 她就那樣靜靜地躺著,像睡著了一般换可。 火紅的嫁衣襯著肌膚如雪椎椰。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天沾鳄,我揣著相機(jī)與錄音慨飘,去河邊找鬼。 笑死译荞,一個(gè)胖子當(dāng)著我的面吹牛瓤的,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播吞歼,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼圈膏,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了篙骡?” 一聲冷哼從身側(cè)響起稽坤,我...
    開(kāi)封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎糯俗,沒(méi)想到半個(gè)月后尿褪,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡叶骨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年茫多,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片忽刽。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡天揖,死狀恐怖夺欲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情今膊,我是刑警寧澤些阅,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站斑唬,受9級(jí)特大地震影響市埋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜恕刘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一缤谎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧褐着,春花似錦坷澡、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至馅扣,卻和暖如春斟赚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背差油。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工拗军, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人厌殉。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓食绿,卻偏偏與公主長(zhǎng)得像侈咕,于是被迫代替她去往敵國(guó)和親公罕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355