coredata 5分鐘上手教程

iOS coredata 因?qū)W習曲線陡峭焕阿,所以用的人不多。
為啥陡峭夯到?
因為coredata不走sql尋常路枣申,自己全新搞了一套售葡,我們忽然發(fā)現(xiàn)之前學的那些sql小技巧似乎都用不上了。
然后網(wǎng)上的教程都是東一坨西一坨的忠藤,看起來和盲人象差不多挟伙,看英文原版教程吧,發(fā)現(xiàn)自己的英文山寨四級水平大概只適合看hello world模孩,只恨當年沒有好好苦練英文尖阔。再加上iOS操作系統(tǒng)的版本不斷升級,前人積累的經(jīng)驗顯得更加碎片榨咐,給本來就一頭霧水的同學平添更多難度介却。

因此特編寫本文,僅適合從來沒有接觸過coredata块茁,但是又想上手一試的同學齿坷,幫助大家在5分鐘之內(nèi)了解coredata的基本用法;

真經(jīng)一句話数焊,假言萬卷書永淌。

開始表演~

一、非常重要的前提

(1)僅適合iOS 10+佩耳,如果想看老版本下的兼容處理遂蛀,本文不適合;
(2)僅適合從來沒有接觸過coredata蚕愤,但是又想上手一試的同學答恶,已經(jīng)了解過的同學就請直接跳過吧,不要浪費生命萍诱;
(3)本文代碼在xcode 12.4悬嗓,iOS 10+ 環(huán)境測試通過;
(4)本文編寫時間為2021年3月 裕坊,如果你看到本文的時間與編寫時間相距過于久遠包竹,建議也不要看了,因為隨著技術(shù)的發(fā)展籍凝,這些文字對你來說可能已經(jīng)是毒藥了周瞎;

二、如何開始

在iOS中使用coredata的基本思路就是:
建立數(shù)據(jù)表模型-->創(chuàng)建對應(yīng)的實體類-->針對實體類增刪改查

2.1饵蒂、建立數(shù)據(jù)表模型

用xcode提供的可視化工具創(chuàng)建數(shù)據(jù)表字段声诸;
如下圖所示:


WeChatf3349af0e36d57d9e8bc4aeeb7c921df.png

其中,

位置1

位置1的名字為:PackageModel.xcdatamodeld
可以把這個文件看作mysql中的一個schema(sqlserver里的一個數(shù)據(jù)庫)退盯,或者sqlite里的一個數(shù)據(jù)庫文件彼乌;
這個文件可以通過xcode>file>new>file>Core Data>Data Model 菜單操作來建立泻肯;
如下圖:


WeChat08d05ff4b45afd9f7902bbcb0905e291.png

位置2

就看做數(shù)據(jù)表結(jié)構(gòu)定義吧
在這里定義了2張數(shù)據(jù)表

位置3

指定數(shù)據(jù)表的字段名稱和字段數(shù)據(jù)類型

位置4

表和表之間的主外鍵關(guān)聯(lián),比如1:1的就是To One,1:* 的就是To many

2.2慰照、創(chuàng)建實體類文件

現(xiàn)在表定義好了灶挟,要開始定義和這些表結(jié)構(gòu)對應(yīng)的實體類文件了。
實體類文件可以自動生成毒租;
方法如下:
(1)打開PackageModel.xcdatamodeld這個倒霉的數(shù)據(jù)庫文件稚铣,
然后在打開的界面下通過xcode菜單來操作:
xcode > Editor > Create NSManagedObject Subclass,xcode會幫你在你自己指定的位置創(chuàng)建好對應(yīng)的實體類文件墅垮;


12601614876564_.pic_hd.jpg

創(chuàng)建好的實體類的樣子如下:


WeChat756a4b720a93b2dc0f7bf24a7e3d619f.png

2.3惕医、開始編寫代碼,愉快的CRUD吧~

#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>

@interface AppManager : NSObject

@property(nonatomic) NSPersistentContainer *persistentContainer;


@end

......下面是.m文件里的內(nèi)容

- (void)configDbModel {
    self.persistentContainer = [NSPersistentContainer persistentContainerWithName:@"PackageModel"];
    [self.persistentContainer loadPersistentStoresWithCompletionHandler:^(NSPersistentStoreDescription * _Nonnull description, NSError * _Nullable error) {
        NSLog(@"error:%@",error.localizedDescription);
        
        //創(chuàng)建一個條新的空白記錄算色,然后寫點東西
        PackageMO *obj = [NSEntityDescription insertNewObjectForEntityForName:@"Package" inManagedObjectContext:self.persistentContainer.viewContext];
        obj.packageId = 100;
        obj.packageName = @"我是一頭豬";
        
        //保存到數(shù)據(jù)庫里
        NSManagedObjectContext *context = self.persistentContainer.viewContext;
        NSError *errorSave = nil;
        [context save:&errorSave];
        
        //再讀出來
        NSError *errorFetch = nil;
        NSFetchRequest *request = [PackageMO fetchRequest];
        NSArray *array = [context executeFetchRequest:request
                                           error:&errorFetch];
        for (PackageMO *p in array) {
                NSLog(@"%ld,%@",(long)p.packageId,p.packageName);
            }

    
    }];
    
}

//日志:
2021-03-05 01:06:31.297519+0800 MarketPromotion[5472:1638998] 100,我是一頭豬

代碼中曹锨,NSPersistentContainer 的實例是核心關(guān)鍵,就當作是前文中所述數(shù)據(jù)庫的肉身管理器吧剃允。
NSManagedObjectContext,也就是上面的代碼中的self.persistentContainer.viewContext齐鲤,就當作是NSPersistentContainer這個數(shù)據(jù)庫肉身管理器的操作API吧斥废。

NSFetchRequest 就當作sql里select語句的變身好了。

三给郊、后記

coredata博大精深牡肉,這就是起了頭,要想用的好淆九,還是得多找更多高級的文檔看看统锤。我們就此別過,緣聚緣散炭庙,愿君碼路之上一碼平川~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末饲窿,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子焕蹄,更是在濱河造成了極大的恐慌逾雄,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腻脏,死亡現(xiàn)場離奇詭異鸦泳,居然都是意外死亡,警方通過查閱死者的電腦和手機永品,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門做鹰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鼎姐,你說我怎么就攤上這事钾麸「瘢” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵喂走,是天一觀的道長殃饿。 經(jīng)常有香客問我,道長芋肠,這世上最難降的妖魔是什么乎芳? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮帖池,結(jié)果婚禮上奈惑,老公的妹妹穿的比我還像新娘。我一直安慰自己睡汹,他們只是感情好肴甸,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著囚巴,像睡著了一般原在。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上彤叉,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天庶柿,我揣著相機與錄音,去河邊找鬼秽浇。 笑死浮庐,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的柬焕。 我是一名探鬼主播审残,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼斑举!你這毒婦竟也來了搅轿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤富玷,失蹤者是張志新(化名)和其女友劉穎介时,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凌彬,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡沸柔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了铲敛。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片褐澎。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖伐蒋,靈堂內(nèi)的尸體忽然破棺而出工三,到底是詐尸還是另有隱情迁酸,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布俭正,位于F島的核電站奸鬓,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏掸读。R本人自食惡果不足惜串远,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望儿惫。 院中可真熱鬧澡罚,春花似錦、人聲如沸肾请。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铛铁。三九已至隔显,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間饵逐,已是汗流浹背荣月。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留梳毙,地道東北人。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓捐下,卻偏偏與公主長得像账锹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子坷襟,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

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