CoreData簡(jiǎn)單使用

github地址
借鑒文章

概念介紹
coreData
NSManagedObjectContext 管理對(duì)象,上下文,持久性存儲(chǔ)模型對(duì)象憋沿,處理數(shù)據(jù)與應(yīng)用的交互,托管對(duì)象上下文谨朝,數(shù)據(jù)庫的大多數(shù)操作是在這個(gè)類操作
NSManagedObjectModel 被管理的數(shù)據(jù)模型卤妒,數(shù)據(jù)結(jié)構(gòu)甥绿,托管對(duì)象模型字币,其中一個(gè)托管對(duì)象模型關(guān)聯(lián)到一個(gè)模型文件,里面存儲(chǔ)著數(shù)據(jù)庫的數(shù)據(jù)結(jié)構(gòu)共缕。
NSPersistentStoreCoordinator 添加數(shù)據(jù)庫洗出,設(shè)置數(shù)據(jù)存儲(chǔ)的名字,位置图谷,存儲(chǔ)方式翩活,持久化存儲(chǔ)協(xié)調(diào)器,主要負(fù)責(zé)協(xié)調(diào)上下文存儲(chǔ)的區(qū)域的關(guān)系便贵。
NSManagedObject 被管理的數(shù)據(jù)記錄菠镇,托管對(duì)象類,其中CoreData里面的托管對(duì)象都會(huì)繼承此類承璃。
NSFetchRequest 數(shù)據(jù)請(qǐng)求
NSEntityDescription 表格實(shí)體結(jié)構(gòu)
NSPredicate 過濾條件利耍,找到要修改的對(duì)象

model文件參考

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN

@interface User : NSManagedObject
//屬性的類型一旦創(chuàng)建不可修改,如需修改,必須刪除APP中舊的數(shù)據(jù)庫文件隘梨,否則崩潰
@property (nonatomic,strong) NSString* name;
@property (nonatomic,assign) BOOL sex;
@property (nonatomic,strong)UIImageView* image;
@property (nonatomic,strong) NSString* aID;
@property (nonatomic,assign) float height;//和CoreDataProject.xcdatamodeld中的UserEntity中的類型一致程癌,不可以是CGFloat
@property (nonatomic,assign) NSInteger age;
@end

NS_ASSUME_NONNULL_END

ViewController文件參考

//
//  ViewController.m
//  CoreDataProject
//
//  Created by alex black on 2019/3/20.
//  Copyright ? 2019 JTB.com. All rights reserved.
//

#import "ViewController.h"
#import <CoreData/CoreData.h>
#import "AppDelegate.h"
#import "User.h"
@interface ViewController ()
@property (nonatomic,strong) NSManagedObjectContext *context;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    NSManagedObjectContext *context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
    //CoreDataProject.xcdatamodeld文件 編譯后就是 CoreDataProject.momd 所以名字要對(duì)應(yīng)
    NSURL *modelPath = [[NSBundle mainBundle] URLForResource:@"CoreDataProject" withExtension:@"momd"];
    NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelPath];
    NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];

    NSString *dataPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject;
    dataPath = [dataPath stringByAppendingFormat:@"/People.sqlite"];//自己定義的數(shù)據(jù)庫名字 千萬別忘記加/ 否則真機(jī)無法創(chuàng)建相應(yīng)文件
    [coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:dataPath] options:nil error:nil];

    context.persistentStoreCoordinator = coordinator;
    self.context = context;
}
#pragma mark - 插入操作
- (void)insertMethod:(NSManagedObjectContext*)context
{
    //@"UserEntity" 要和 CoreDataProject.xcdatamodeld文件中定義的model名字一樣  特別注意:User中的屬性描述必須和UserEntity的屬性描述一致,否則無法存入轴猎,例如User的height是CGFloat 而 UserEntity的height是Float嵌莉,類型不一致無法存入信息,也無法修改
    User* obj =  (User*)[NSEntityDescription insertNewObjectForEntityForName:@"UserEntity" inManagedObjectContext:context];
    obj.name = @"ee";
    obj.sex = YES;
    obj.age = 18;
    obj.height = 180;
    
    User* obj2 =  (User*)[NSEntityDescription insertNewObjectForEntityForName:@"UserEntity" inManagedObjectContext:context];
    obj2.name = @"pp";
    obj2.sex = NO;
    obj2.age = 16;
    obj2.height = 160;
    
    NSError *error1;
    if (context.hasChanges) {
        [context save:&error1];
    }
    if (error1) {
        NSLog(@"error1 = %@",error1);
    }
}
#pragma mark - 刪除操作
- (void)deleteMethod:(NSManagedObjectContext*)context{
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"UserEntity"];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name=%@",@"ee"];
    request.predicate = predicate;
    NSError *error2;
    NSArray<User*> *deleteArr = [context executeFetchRequest:request error:&error2];
    [deleteArr enumerateObjectsUsingBlock:^(User * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        [context deleteObject:(NSManagedObject*)obj];
    }];
    if ([context hasChanges]) {
        [context save:nil];
    }
    if (error2) {
        NSLog(@"%@",error2);
    }
}
#pragma mark - 修改操作
- (void)changeMethod:(NSManagedObjectContext*)context{
    NSFetchRequest *request1 = [NSFetchRequest fetchRequestWithEntityName:@"UserEntity"];
    NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"name=%@",@"pp"];
    request1.predicate = predicate1;
    NSError *error3 = nil;
    NSArray<User*> *chageArr = [context executeFetchRequest:request1 error:&error3];
    [chageArr enumerateObjectsUsingBlock:^(User * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        obj.height = 133;
    }];
    if ([context hasChanges]) {
        [context save:nil];
    }
    if (error3) {
        NSLog(@"%@",error3);
    }
}
#pragma mark - 查找操作
- (void)queryMethod:(NSManagedObjectContext*)context{
    NSFetchRequest *request4 = [NSFetchRequest fetchRequestWithEntityName:@"UserEntity"];
    NSError *error4 = nil;
    NSArray<User *> *quertArr = [context executeFetchRequest:request4 error:&error4];
    [quertArr enumerateObjectsUsingBlock:^(User * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        NSLog(@"User Name : %@, Height : %@, age : %d", obj.name, @(obj.height), obj.age);
    }];
    
    // 錯(cuò)誤處理
    if (error4) {
        NSLog(@"%@", error4);
    }
}
- (IBAction)buttonClick:(UIButton *)sender {
    if (sender.tag == 1) {
        [self insertMethod:self.context];
    }else if (sender.tag == 2) {
        [self deleteMethod:self.context];
    }else if (sender.tag == 3) {
        [self changeMethod:self.context];
    }else if (sender.tag == 4) {
        [self queryMethod:self.context];
    }
}

@end

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末捻脖,一起剝皮案震驚了整個(gè)濱河市锐峭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌郎仆,老刑警劉巖只祠,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異扰肌,居然都是意外死亡抛寝,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門曙旭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盗舰,“玉大人,你說我怎么就攤上這事桂躏∽昵鳎” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵剂习,是天一觀的道長蛮位。 經(jīng)常有香客問我,道長鳞绕,這世上最難降的妖魔是什么失仁? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮们何,結(jié)果婚禮上萄焦,老公的妹妹穿的比我還像新娘。我一直安慰自己冤竹,他們只是感情好拂封,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鹦蠕,像睡著了一般冒签。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上钟病,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天萧恕,我揣著相機(jī)與錄音霜定,去河邊找鬼。 笑死廊鸥,一個(gè)胖子當(dāng)著我的面吹牛望浩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播惰说,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼磨德,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了吆视?” 一聲冷哼從身側(cè)響起典挑,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎啦吧,沒想到半個(gè)月后您觉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡授滓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年琳水,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片般堆。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡在孝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出淮摔,到底是詐尸還是另有隱情私沮,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布和橙,位于F島的核電站仔燕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏魔招。R本人自食惡果不足惜晰搀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望仆百。 院中可真熱鬧厕隧,春花似錦奔脐、人聲如沸俄周。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽峦朗。三九已至,卻和暖如春排龄,著一層夾襖步出監(jiān)牢的瞬間波势,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留尺铣,地道東北人拴曲。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像凛忿,于是被迫代替她去往敵國和親澈灼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

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

  • CoreData相當(dāng)于一個(gè)綜合的數(shù)據(jù)存儲(chǔ)和管理中心店溢,它支持sqlite叁熔,二進(jìn)制存儲(chǔ)文件兩種形式的數(shù)據(jù)存儲(chǔ)。而Cor...
    methodname閱讀 2,011評(píng)論 2 2
  • 文件 歸檔(NSKeyedArchiver) 屬性列表(NSUserDefaults) 數(shù)據(jù)庫(SQLite床牧、Co...
    零度_不結(jié)冰閱讀 8,642評(píng)論 0 2
  • 一荣回、文件 應(yīng)用程序包 : 這里面存放的是應(yīng)用程序的源文件,包括資源文件和可執(zhí)行文件戈咳。NSString *path ...
    今天又要上班嗎閱讀 597評(píng)論 0 2
  • 每個(gè)人的生命中都有一條河心软,可以讓生命和靈魂得到洗禮,我的生命之河就是家鄉(xiāng)的大沽河著蛙。我從小生長在沽河邊糯累,沽河的水從遠(yuǎn)...
    東嶗觀海閱讀 483評(píng)論 1 12
  • 前天,我在簡(jiǎn)書上發(fā)表題目為《吵架》的文章册踩,引來相識(shí)的簡(jiǎn)友圍觀泳姐。有人說,這也叫吵架暂吉?小冷戰(zhàn)還差不多胖秒。然后,你來了慕的,開...
    見伊閱讀 1,071評(píng)論 161 59