關(guān)于CoreData的增 刪 改

CoeeData是蘋果公司封裝的數(shù)據(jù)持久化框架 在iOS3.0中開放 它允許用戶按照實(shí)體-屬性-模型組織數(shù)據(jù) 并以二進(jìn)制/XML/sqlite數(shù)據(jù)文件的格式進(jìn)行持久化

CoreData的優(yōu)勢 他是蘋果公司的原生態(tài)的產(chǎn)品 他可以節(jié)省代碼量 大概是30%-70%,它支持可視化建模,CoreData支持?jǐn)?shù)據(jù)庫版本升級(jí)

屏幕快照 2016-03-07 下午7.46.27.png

首先點(diǎn)擊圖中紅線標(biāo)注的地方 之后點(diǎn)擊add Edtity添加類 改類的名字 在Attributes中添加類是屬性之后點(diǎn)擊之后步驟看圖

屏幕快照 2016-03-07 下午7.51.04.png

點(diǎn)next

屏幕快照 2016-03-07 下午7.51.20.png
屏幕快照 2016-03-07 下午7.51.38.png

記得options記得打鉤 之后創(chuàng)建

創(chuàng)建ViewController文件 ViewController.h聲明

#import <UIKit/UIKit.h>
#import "AppDelegate.h"
@interface CoreDataViewController : UITableViewController
//創(chuàng)建一個(gè)屬性 指定我們的對(duì)象
@property(nonatomic,strong)AppDelegate *myAppDelegate;
//創(chuàng)建一個(gè)上下文對(duì)象 用于處理所有與存儲(chǔ)相關(guān)的請(qǐng)求
@property(nonatomic,strong)NSManagedObjectContext *myContext;
//創(chuàng)建一個(gè)數(shù)組 用于存儲(chǔ)數(shù)組的數(shù)據(jù)源
@property(nonatomic,strong)NSMutableArray *allData;

@end

ViewController.m 這里用可視化

屏幕快照 2016-03-07 下午7.57.45.png

添加按鈕事件在ViewController.m 下面代碼實(shí)現(xiàn)CoreData的增 刪 改功能

- (void)viewDidLoad {
    [super viewDidLoad];    
    //進(jìn)行數(shù)據(jù)初始化
    AppDelegate *dele = [UIApplication sharedApplication].delegate;
    self.myContext = dele.managedObjectContext;    
    self.allData = [NSMutableArray array];    
    //通過CoreData讀取本地所有的數(shù)據(jù) 
    [self getAllDataFromCoreData];    
}
//通過CoreData讀取本地所有的數(shù)據(jù)
-(void)getAllDataFromCoreData{    
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Student" inManagedObjectContext:self.myContext];
    [fetchRequest setEntity:entity];
    // Specify criteria for filtering which objects to fetch
    //謂詞
    // Specify how the fetched objects should be sorted
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"age"
                                                                   ascending:YES];
    [fetchRequest setSortDescriptors:[NSArray arrayWithObjects:sortDescriptor, nil]];    
    NSError *error = nil;
    NSArray *fetchedObjects = [self.myContext executeFetchRequest:fetchRequest error:&error];
    if (fetchedObjects == nil) {
        NSLog(@"兩手空空你讓我如何盆滿缽滿");
    }
    //將查詢到的數(shù)據(jù)添加到數(shù)據(jù)源
    [self.allData addObjectsFromArray:fetchedObjects];
    //重新加載tableView
    [self.tableView reloadData];
}
//添加數(shù)組
- (IBAction)addAction:(UIBarButtonItem *)sender {
    //1 創(chuàng)建student對(duì)象
    //創(chuàng)建于一個(gè)實(shí)體描述
    NSEntityDescription *stuDis = [NSEntityDescription entityForName:@"Student" inManagedObjectContext:self.myContext];                              
//    Student *stu = [[Student alloc]init];
    Student *stu = [[Student alloc]initWithEntity:stuDis insertIntoManagedObjectContext:self.myContext];
    //給屬性賦值
    stu.name = @"張三";
    stu.age = arc4random() % 73 + 1;
    //1 修改數(shù)據(jù)源
    [self.allData addObject:stu];
    //2 修改界面
    NSIndexPath *path = [NSIndexPath indexPathForRow:self.allData.count - 1 inSection:0];
    [self.tableView insertRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationLeft];
    //將數(shù)據(jù)保存到文件中進(jìn)行持久化
    NSError *error = nil;
    [self.myContext save:&error];
    if (nil != error) {
        NSLog(@"數(shù)據(jù)庫存儲(chǔ)持久化存在問題");
    }
    [((AppDelegate *)[UIApplication sharedApplication].delegate) saveContext]; 
}
//當(dāng)點(diǎn)擊tableViewCell的刪除按鈕的時(shí)候會(huì)調(diào)用 (當(dāng)提交編輯請(qǐng)求的時(shí)候回調(diào)用)
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        //1 獲取當(dāng)前cell代表的數(shù)據(jù)
        Student *stu = self.allData[indexPath.row];
        //2 更新數(shù)據(jù)源
        [self.allData removeObject:stu];
        //3 更新UI
        [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft];
        //4 將臨時(shí)數(shù)據(jù)庫里進(jìn)行刪除 并進(jìn)行本地?cái)?shù)據(jù)持久化
        [self.myContext deleteObject:stu];
        [self.myContext save:nil];
    } 
}
//點(diǎn)擊cell的響應(yīng)事件(修改數(shù)據(jù))
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    //1 更新第一步: 先查詢(FET)
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Student" inManagedObjectContext:self.myContext];
    [fetchRequest setEntity:entity];
    // Specify criteria for filtering which objects to fetch
    // Specify how the fetched objects should be sorted
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"age"
                                                                   ascending:YES];
    [fetchRequest setSortDescriptors:[NSArray arrayWithObjects:sortDescriptor, nil]];
    NSError *error = nil;
    NSArray *fetchedObjects = [self.myContext executeFetchRequest:fetchRequest error:&error];
    // 修改對(duì)應(yīng)的數(shù)據(jù)
    Student *stu = self.allData[indexPath.row];
    stu.name = @"尼古拉斯.趙四";
    //更新數(shù)據(jù)源
    [self.allData removeAllObjects];
    [self.allData addObjectsFromArray:fetchedObjects];
    //更新頁面
    [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft];
    //將修改本地持久化
    [self.myContext save:nil];
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return self.allData.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"main_cell" forIndexPath:indexPath];
    Student *stu = self.allData[indexPath.row];
    cell.textLabel.text = stu
    .name;
    cell.detailTextLabel.text = [NSString stringWithFormat:@"%d",stu.age];
    // Configure the cell...
    
    return cell;
}

以上代碼實(shí)現(xiàn)了CoreData的簡單增 刪 改功能 希望對(duì)你有所幫助

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末斤斧,一起剝皮案震驚了整個(gè)濱河市吮铭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌番舆,老刑警劉巖面殖,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡宽堆,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門茸习,熙熙樓的掌柜王于貴愁眉苦臉地迎上來畜隶,“玉大人,你說我怎么就攤上這事号胚∽崖” “怎么了?”我有些...
    開封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵猫胁,是天一觀的道長箱亿。 經(jīng)常有香客問我,道長弃秆,這世上最難降的妖魔是什么届惋? 我笑而不...
    開封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮菠赚,結(jié)果婚禮上脑豹,老公的妹妹穿的比我還像新娘。我一直安慰自己衡查,他們只是感情好瘩欺,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拌牲,像睡著了一般俱饿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上塌忽,一...
    開封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天拍埠,我揣著相機(jī)與錄音,去河邊找鬼土居。 笑死枣购,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的装盯。 我是一名探鬼主播坷虑,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼埂奈!你這毒婦竟也來了迄损?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤账磺,失蹤者是張志新(化名)和其女友劉穎芹敌,沒想到半個(gè)月后痊远,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡氏捞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年碧聪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片液茎。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡逞姿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出捆等,到底是詐尸還是另有隱情滞造,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布栋烤,位于F島的核電站谒养,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏明郭。R本人自食惡果不足惜买窟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望薯定。 院中可真熱鬧始绍,春花似錦、人聲如沸沉唠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽满葛。三九已至,卻和暖如春罢屈,著一層夾襖步出監(jiān)牢的瞬間嘀韧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來泰國打工缠捌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留锄贷,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓曼月,卻偏偏與公主長得像谊却,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子哑芹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

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

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫炎辨、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,065評(píng)論 4 62
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,787評(píng)論 25 707
  • 昨天開區(qū)會(huì)聪姿,為了完成報(bào)告碴萧,前一天晚上我只睡了半個(gè)小時(shí)乙嘀,結(jié)果沒有半個(gè)小時(shí)就講完了所有報(bào)告,看大家反應(yīng)好像沒有那么驚艷...
    菜慢慢閱讀 342評(píng)論 0 0
  • 在Hibernate的實(shí)體類(Entity)中對(duì)應(yīng)Oracle數(shù)據(jù)庫中的Date類型時(shí)破喻,日期時(shí)間類型的屬性字段設(shè)置...
    ProteanBear閱讀 1,313評(píng)論 0 0
  • 有時(shí)候從后臺(tái)返回?cái)?shù)據(jù)json轉(zhuǎn)model之后虎谢,還是nsnumber 比如 #import @interfaceSe...
    碧玉小瑕閱讀 219評(píng)論 0 0