CoreData-增刪改查(二)

接上篇文章莹汤,CoreData可視化創(chuàng)建和初始化(一)
可以自己創(chuàng)建一個(gè)tableView進(jìn)行數(shù)據(jù)展示,并進(jìn)行增刪改查操作

1.需要先獲取context 對(duì)象
AppDelegate *delegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
    NSManagedObjectContext *context = delegate.context;
2.插入數(shù)據(jù)
// 增加數(shù)據(jù)
- (void)insertData{
    
    //    數(shù)據(jù)添加
    NSArray *arr = @[@{@"name":@"張三",@"age":@22,@"stuId":@6},@{@"name":@"李四",@"age":@22,@"stuId":@12},@{@"name":@"王二",@"age":@22,@"stuId":@11}];
    for (NSDictionary *dict in arr) {
        
        Model *model = [[Model alloc] initWithDictionary:dict];
        Student *student = [NSEntityDescription insertNewObjectForEntityForName:@"Student" inManagedObjectContext:self.context];
        student.name = model.name;
        student.stuId = model.stuId;
        student.age = model.age;
        NSError *error;
        [self.context save:&error];
        if (error) {
            NSLog(@"插入數(shù)據(jù)錯(cuò)誤 %@",error);
        }
        
    }
    
}
3.查詢數(shù)據(jù)
//  查詢數(shù)據(jù)
- (void)fetchData{
//    查詢指令
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
//    獲取要查詢的表單
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Student" inManagedObjectContext:self.context];
//    給查詢指令設(shè)置要查詢的表單
    [fetchRequest setEntity:entity];
//    自定義要查詢的條件
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"stuId > %d",3];
//    給查詢指令設(shè)置查詢條件
    [fetchRequest setPredicate:predicate];
//  給查詢進(jìn)行排序  升序
    NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc] initWithKey:@"stuId" ascending:YES];
//    年齡 升序
    NSSortDescriptor *sortDescriptor2 = [[NSSortDescriptor alloc] initWithKey:@"age" ascending:YES];
//    按照在數(shù)組的位置读第,越靠前優(yōu)先級(jí)越高
    NSArray *sortDescriptors = @[sortDescriptor1,sortDescriptor2];
//    給查詢指令設(shè)置排序條件
    fetchRequest.sortDescriptors = sortDescriptors;
    NSError *error;
//    可以隨意轉(zhuǎn)化成模型
     NSArray *result = [self.context executeFetchRequest:fetchRequest error:&error];
    if (error) {
        NSLog(@"查詢失敗 %@",error);
    }else{
        
        NSMutableArray *arrM = [NSMutableArray array];
//        for (NSInteger i = 0; i<result.count; i++) {
////            Student *student = result[i];
//            Model *model = result[i];
//            NSLog(@"%ld %@ %ld",(NSInteger)model.stuId,model.name,(NSInteger)model.age);
////            NSLog(@"%ld %@ %ld",(NSInteger)result[i].stuId,result[i].name,(NSInteger)result[i].age);
//
//        }
//        _modelList = arrM.copy;
        
        for (Model *model in result) {
             NSLog(@"%ld %@ %ld",(NSInteger)model.stuId,model.name,(NSInteger)model.age);
            [arrM addObject:model];
        }
         _modelList = arrM.copy;
        [self.tableView reloadData];
    }
    
}

查詢時(shí)需要主要謂詞的用法

謂詞查詢條件:predicate
謂詞的條件指令
1.比較運(yùn)算符 > 曙博、< 、== 怜瞒、>= 羊瘩、<= 、!= 例:@"number >= 99"
2.范圍運(yùn)算符:IN 盼砍、BETWEEN 例:@"number BETWEEN {1,5}" @"address IN {'shanghai','nanjing'}"
3.字符串本身:SELF 例:@"SELF == 'APPLE'"
4.字符串相關(guān):BEGINSWITH尘吗、ENDSWITH、CONTAINS
例: @"name CONTAIN[cd] 'ang'"http://包含某個(gè)字符串
@"name BEGINSWITH[c] 'sh'" //以某個(gè)字符串開頭
@"name ENDSWITH[d] 'ang'" //以某個(gè)字符串結(jié)束
5.通配符:LIKE 例:@"name LIKE[cd] 'er'"http://代表通配符,Like也接受[cd].
@"name LIKE[cd] '???er'"
: 星號(hào) "
" : 代表0個(gè)或多個(gè)字符 問號(hào) "?" : 代表一個(gè)字符
6.正則表達(dá)式:MATCHES 例:NSString regex = @"^A.+e$"; //以A開頭浇坐,e結(jié)尾
@"name MATCHES %@",regex
注:[c]
不區(qū)分大小寫 , [d]不區(qū)分發(fā)音符號(hào)即沒有重音符號(hào), [cd]既不區(qū)分大小寫睬捶,也不區(qū)分發(fā)音符號(hào)。

  1. 合計(jì)操作 ANY近刘,SOME:指定下列表達(dá)式中的任意元素擒贸。比如,ANY children.age < 18觉渴。
    ALL:指定下列表達(dá)式中的所有元素介劫。比如,ALL children.age < 18案淋。
    NONE:指定下列表達(dá)式中沒有的元素座韵。比如,NONE children.age < 18踢京。它在邏輯上等于NOT (ANY ...)誉碴。
    IN:等于SQL的IN操作,左邊的表達(dá)必須出現(xiàn)在右邊指定的集合中瓣距。比如黔帕,name IN { 'Ben', 'Melissa', 'Nick' }。
    提示: 1. 謂詞中的匹配指令關(guān)鍵字通常使用大寫字母
    2. 謂詞中可以使用格式字符串
    3. 如果通過對(duì)象的key path指定匹配條件蹈丸,需要使用%K

//創(chuàng)建查詢請(qǐng)求實(shí)例演示
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Student"];
//查詢條件
NSPredicate *pre = [NSPredicate predicateWithFormat:@"sex = %@", @"美女"]; r
equest.predicate = pre;
// 從第幾頁開始顯示
// 通過這個(gè)屬性實(shí)現(xiàn)分頁
//request.fetchOffset = 0;
// 每頁顯示多少條數(shù)據(jù)
//request.fetchLimit = 6;
//發(fā)送查詢請(qǐng)求 NSArray *resArray = [_context executeFetchRequest:request error:nil]; [self alertViewWithMessage:@"查詢所有的美女"];

4.刪除數(shù)據(jù)
// 刪除數(shù)據(jù)
- (void)deleteData{
    
//    先查找出要?jiǎng)h除的數(shù)據(jù)然后再刪除
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Student"];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"stuId = 11"];
    request.predicate = predicate;
    
   NSArray *result = [self.context executeFetchRequest:request error:nil];
    for (Student *obj in result) {
        [self.context deleteObject:obj];
    }
//    如果沒有save 的話成黄,數(shù)據(jù)庫并沒有真的刪掉數(shù)據(jù)呐芥,只是把你緩存的結(jié)果刪掉了
    [self.context save:nil];
//    再次查找的話,并沒有從數(shù)據(jù)庫里查找奋岁,重啟應(yīng)用程序還是有的
    [self fetchData];// 查看是否刪掉數(shù)據(jù)
    
    
}
5.修改數(shù)據(jù)
// 修改數(shù)據(jù)
- (void)updateData{
//    同刪除數(shù)據(jù)一樣贩耐,也要先查出要修改的數(shù)據(jù),然后再進(jìn)行修改
    //    先查找出要?jiǎng)h除的數(shù)據(jù)然后再刪除
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Student"];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"stuId = 7"];
    request.predicate = predicate;
    
    NSArray *result = [self.context executeFetchRequest:request error:nil];
    for (Student *obj in result) {
        obj.name = @"王二";
    }
    //    如果沒有save 的話厦取,數(shù)據(jù)庫并沒有真的刪掉數(shù)據(jù),只是把你緩存的結(jié)果刪掉了
    [self.context save:nil];
    //    再次查找的話管搪,并沒有從數(shù)據(jù)庫里查找虾攻,重啟應(yīng)用程序還是有的
    [self fetchData];// 查看是否刪掉數(shù)據(jù)
   
}

// 調(diào)用刪除和更新操作
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
// [self deleteData];
[self updateData];
}

下篇文章會(huì)介紹CoreData的二次封裝,在實(shí)際開發(fā)中建議使用更鲁,可移植性很好霎箍,在項(xiàng)目中可以快速開發(fā)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末澡为,一起剝皮案震驚了整個(gè)濱河市漂坏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌媒至,老刑警劉巖顶别,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異拒啰,居然都是意外死亡驯绎,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門谋旦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來剩失,“玉大人,你說我怎么就攤上這事册着∷┕拢” “怎么了?”我有些...
    開封第一講書人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵甲捏,是天一觀的道長演熟。 經(jīng)常有香客問我,道長司顿,這世上最難降的妖魔是什么绽媒? 我笑而不...
    開封第一講書人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮免猾,結(jié)果婚禮上是辕,老公的妹妹穿的比我還像新娘。我一直安慰自己猎提,他們只是感情好获三,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開白布旁蔼。 她就那樣靜靜地躺著,像睡著了一般疙教。 火紅的嫁衣襯著肌膚如雪棺聊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,785評(píng)論 1 290
  • 那天贞谓,我揣著相機(jī)與錄音限佩,去河邊找鬼。 笑死裸弦,一個(gè)胖子當(dāng)著我的面吹牛祟同,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播理疙,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼晕城,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了窖贤?” 一聲冷哼從身側(cè)響起砖顷,我...
    開封第一講書人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赃梧,沒想到半個(gè)月后滤蝠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡授嘀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年几睛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片粤攒。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡所森,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出夯接,到底是詐尸還是另有隱情焕济,我是刑警寧澤,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布盔几,位于F島的核電站晴弃,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏逊拍。R本人自食惡果不足惜上鞠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望芯丧。 院中可真熱鬧芍阎,春花似錦、人聲如沸缨恒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至岭佳,卻和暖如春血巍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背珊随。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工述寡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人叶洞。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓鲫凶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親京办。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348