CoreData 簡要總結(jié)(一)創(chuàng)建長下文

CoreData簡介

Core Data提供了對象-關(guān)系映射(ORM)的功能唬党,即能夠?qū)C對象轉(zhuǎn)化成數(shù)據(jù)鹃共,保存在SQLite數(shù)據(jù)庫文件中,也能夠?qū)⒈4嬖跀?shù)據(jù)庫中的數(shù)據(jù)還原成OC對象驶拱。在此數(shù)據(jù)操作期間霜浴,我們不需要編寫任何SQL語句。

特點:
1蓝纲、可視化阴孟,且具有undo/redo能力
2、可以實現(xiàn)多種文件格式:
   * NSSQLiteStoreType        SQLite
   * NSBinaryStoreType        Binary
   * NSInMemoryStoreType      內(nèi)存存儲
   * NSXMLStoreTyp            XML

CoreData 核心類與結(jié)構(gòu)

NSManagedObjectContext(托管對象上下文)

指定隊列
 _managedObjectContext = [[NSManagedObjectContext alloc]initWithConcurrencyType:NSMainQueueConcurrencyType];
指定協(xié)調(diào)器 
[_managedObjectContext setPersistentStoreCoordinator:coordinator];

 作用:插入税迷、查詢温眉、刪除、更新數(shù)據(jù)翁狐。

NSPersistentStoreCoordinator(持久化協(xié)調(diào)器)

  NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]
  作用:相當于數(shù)據(jù)庫的連接器类溢;
       設置數(shù)據(jù)存儲的名字,位置露懒,存儲方式闯冷,和存儲時機

NSManagedObjectModel(對象映射模型)

    _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];

  作用:添加實體的屬性,建立屬性之間的關(guān)系
  操作方法:視圖編輯器懈词,或代碼

NSManagedObject(托管對象)


核心對象關(guān)系.png

CoreData 創(chuàng)建步驟:

1.創(chuàng)建模型文件 [相當于一個數(shù)據(jù)庫]
2.添加實體 [一張表]
3.創(chuàng)建實體類 [相當模型--表結(jié)構(gòu)]
4.生成上下文 關(guān)聯(lián)模型文件生成數(shù)據(jù)庫

簡要截圖:

1.創(chuàng)建模型文件

創(chuàng)建模型文件

**2.添加實體 **:


添加蛇耀、編輯實體

3.創(chuàng)建實體類

  • 方法1 (酌情使用)
    自己創(chuàng)建相應類并繼承 NSManagedObject 使用:
    這里需要注意的是,自己創(chuàng)建的類名不能和CoreData中的實體(Entity)重名坎弯,否則會報錯纺涤。
    比如译暂,下面的代碼Employee類就會與上圖的Employee 實體沖突。所以要換成不同的名字撩炊,最后關(guān)聯(lián)二者則需要insertNewObjectForEntityForName: inManagedObjectContext: 方法外永。例如改為Person后的代碼:
    Person * p = [NSEntityDescription insertNewObjectForEntityForName:@"Employee" inManagedObjectContext:_context];
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>

@interface Employee : NSManagedObject //要換個名字

@property (nonatomic ,strong)NSDate *birthDay;
@property (nonatomic ,assign)float height;
@property (nonatomic ,copy)NSString *name;

@end
  • 方法2 (Tools Version: Xcode8.0 ; Codegen: Class Definition)推薦使用。

Xcode8 在創(chuàng)建Entity后拧咳,應該會自動創(chuàng)建以前版本中NSManageObject subclass選項創(chuàng)建的兩個類別文件伯顶。所以這里我們可以直接#import使用(在文件夾中我沒有找到相應文件)。

這個方法如果想向+CoreDataClass 骆膝、 +CoreDataProperties文件中添加代碼祭衩,我是分別import相應文件,command能夠進入文件添加代碼阅签。

懷疑是Xcode的bug掐暮,但也有可能是Xcode覺得顯示出文件太多了,等后續(xù)版本政钟。

  • 方法3 (Tools Version: Xcode7.3 或 Tools Version: Xcode8.0劫乱; Codegen: Class Definition )
    Xcode8 之后新建文件Core Data一欄只剩了兩個,NSManageObject subclass不翼而飛锥涕。若想還是要用它:
    注意: 我的Xcode8 中會有.CoreDataClass文件的重復沖突報錯,不知是否是其bug狭吼。
    解決辦法為:選中你的xcdatamodeld文件层坠,點擊相應Entity ,在右側(cè)設置 Tools Version選擇 Xcode7.3刁笙。
    選中你的xcdatamodeld文件破花,點擊導航欄的Editor,選擇Create NSManagedObject Subclass...然后就是下一步疲吸、下一步座每。。摘悴。峭梳。創(chuàng)建完成的結(jié)果如圖:
NSManagedObject Subclass文件

1.創(chuàng)建出的實體文件默認語言貌似是Swift的,想要OC版的小伙伴只需要選中你的xcdatamodeld文件蹂喻,點擊相應Entity選擇對應語言再創(chuàng)建NSManageObject subclass即可葱椭!

4.生成上下文 關(guān)聯(lián)模型文件生成數(shù)據(jù)庫
簡要代碼實現(xiàn):

 //1、創(chuàng)建模型對象
    //獲取模型路徑
    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"company" withExtension:@"momd"];
    //根據(jù)模型文件創(chuàng)建模型對象
    NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];


//2口四、創(chuàng)建持久化助理
    //利用模型對象創(chuàng)建助理對象
    NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];

    //數(shù)據(jù)庫的名稱和路徑
    NSString *docStr = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *sqlPath = [docStr stringByAppendingPathComponent:@"mySqlite.sqlite"];
    NSLog(@"path = %@", sqlPath);
    NSURL *sqlUrl = [NSURL fileURLWithPath:sqlPath];

    //設置數(shù)據(jù)庫相關(guān)信息
    [store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:sqlUrl options:nil error:nil];


//3孵运、創(chuàng)建上下文
    NSManagedObjectContext *context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];

    //關(guān)聯(lián)持久化助理
    [context setPersistentStoreCoordinator:store];

    _context = context;

}

關(guān)于CoreData升級

Xcode8.0以前版本,如果iOS App 使用到CoreData蔓彩,并且在上一個版本上有數(shù)據(jù)庫更新(新增表治笨、字段等操作)驳概,那在覆蓋安裝程序時就要進行CoreData數(shù)據(jù)庫的遷移。具體操作如下:ios修改了coredata數(shù)據(jù)結(jié)構(gòu)后旷赖,更新安裝會閃退

現(xiàn)在顺又,
用上文中提到的方法二創(chuàng)建的CoreData,(Tools Version: Xcode8.0 ; Codegen: Class Definition)。無論是新增表杠愧、字段等操作待榔,Xcode會自動更新,不會出現(xiàn)崩潰問題流济。所以以后就用方法二做CoreData吧~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末锐锣,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子绳瘟,更是在濱河造成了極大的恐慌雕憔,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件糖声,死亡現(xiàn)場離奇詭異斤彼,居然都是意外死亡,警方通過查閱死者的電腦和手機蘸泻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門琉苇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人悦施,你說我怎么就攤上這事并扇。” “怎么了抡诞?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵穷蛹,是天一觀的道長。 經(jīng)常有香客問我昼汗,道長肴熏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任顷窒,我火速辦了婚禮蛙吏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鞋吉。我一直安慰自己出刷,他們只是感情好,可當我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布坯辩。 她就那樣靜靜地躺著馁龟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪漆魔。 梳的紋絲不亂的頭發(fā)上坷檩,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天却音,我揣著相機與錄音,去河邊找鬼矢炼。 笑死系瓢,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的句灌。 我是一名探鬼主播夷陋,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼胰锌!你這毒婦竟也來了骗绕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤资昧,失蹤者是張志新(化名)和其女友劉穎酬土,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體格带,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡撤缴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了叽唱。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片屈呕。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖棺亭,靈堂內(nèi)的尸體忽然破棺而出虎眨,到底是詐尸還是另有隱情逾一,我是刑警寧澤诸狭,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布顿肺,位于F島的核電站,受9級特大地震影響钉稍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜棺耍,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一贡未、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蒙袍,春花似錦俊卤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至以现,卻和暖如春狠怨,著一層夾襖步出監(jiān)牢的瞬間约啊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工佣赖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留恰矩,地道東北人。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓憎蛤,卻偏偏與公主長得像外傅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子俩檬,可洞房花燭夜當晚...
    茶點故事閱讀 45,055評論 2 355

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