Core Data框架(二)

一、設計實體模型(打開FKModel.xcdatamodeld)

1.對象模型的三種對象

(1)實體:最核心的對象,必須是NSManagedObject類或其子類。

(2)抓取請求:NSFetchRequest對象,Xcode允許在圖形界面上抓取請求對象,但我們通 ? ? ?常會在代碼中創建NSFetchRequest對象。

(3)配置:一般不需要自己天劍配置對象,添加實體后會自動添加默認配置。

2.實體的三種屬性

(1)屬性(Attribute):相當于實體對象的實例變量,記錄實體狀態。

(2)關聯關系(Relationships): 1:1、1:N、N:N

(3)抓取屬性(Fetched Properties):關聯關系可選方法,允許在獲取關聯實體時執行某個過濾條件。

3.添加完實體切換實體對象圖可以看得很明了

4.最后一步創建。

二、使用Core Data實現數據的增、刪、改、查

1.添加實體

(1)首先調用NSEntityDescription的insertNewObjectForEntityForName:inManagedObjectContext:類方法來添加新實體第一個參數設置實體名,第二個參數為NSManagedObjectContext對象。

(2)為新實體設置屬性

(3)調用NSManagedObjectContext對象的save:方法執行保存

//控制Core Data 在托管對象上下文中創建一個新實體

FKEntity* event=[[NSEntityDescription]insertNewObjectForEntityForName:@"FKEntity" inManagedObjectContext:self.appDelegate.managedObjectContext];

//為新實體設置屬性

...

//定義一個NSError對象,用于接收錯誤信息

NSError *error;

//設置完實體屬性后調用托管上下文的save:方法將實體寫入數據庫,

if([self.appDelegate.managedObjectContext save:&error]){

...

}

else{

NSLog(@"保存實體出錯:%@,%@",error,[error userInfo]);

}


2.刪除實體

(1)獲取刪除實體

(2)調用NSManagedObjectContext對象的deleteObject:方法刪除實體。

(3)調用NSManagedObjectContext對象的save:方法保存

//獲取將要刪除的實體

FKEvent *deleteEvent=....

//從托管對象上下文中刪除指定對象

[self.appDeletegate.managedObjectContext deleteObject:deleteEvent];

//定義一個NSError對象,用于接收錯誤消息

NSError *error;

//保存刪除操作,如果出現錯誤,顯示錯誤信息

if(![self.appDelegate.manageObjectContext save:&error])

{

NSLog(@"刪除實體出錯:%@,%@",error,[error userInfo]);

}


3.修改實體

(1)獲取修改實體

(2)修改實體

(3)保存

//獲取將要修改的實體

FKEvent *updateEvent=....

//修改實體屬性

...

//定義一個NSError對象,用于接收錯誤消息

NSError *error;

//保存修改操作,如果出現錯誤,顯示錯誤信息

if(![self.appDelegate.manageObjectContext save:&error])

{

NSLog(@"修改實體出錯:%@,%@",error,[error userInfo]);

}


4.查詢實體

(1)創建NSFetchRequest對象

(2)通過NSEntityDescroption對象設置NSFetchRequest對象將要抓取的實體

(3)如果需要篩選則通過NSPredicate對象設置篩選條件,如需要排序還需要為NSFetchRequest添加多個NSSortDescriptor對象


//創建抓取數據的請求對象

NSFetchRequest *request=[[NSFetchRequest alloc]init];

//設置要抓取哪種類型的實體

NSEntityDescription *entity=[NSEntityDescription entityForName:@"FKEvent" ?inManagedObjectContext:self.appDelegate.managedObjectContext];

//設置抓取實體

[request setEntity:entity];

//設置抓取條件

request.predicate=[NSPredicate predicateWithFormat...];

NSError *error=nil;

//執行抓取數據的請求,返回符合條件的數據

NSArray *array=[[self.appDelegate.managedObjectContext executeFetchRequest:request error:&error]mutableCopy];



三、實例(自動初始化)

1.新建一個Empty Application項目 并勾選Use Core Data(默認勾選)

2.添加CoreData.framework框架

3.添加一個空的.xcdatamodeld實體設計文件

4.在appDelegate中為CoreData的三個API定義屬性并提供了方法執行初始化,在該方法中調用托管上下文的save:方法

5.添加實體與實體的關聯如圖


6.設置author與books的1:N雙向關聯




7.Delete Rule屬性:

(1)NO Action:主體被刪除時,關聯的目標實體沒有任何改變。

(2)Nullify:主體被刪除時,關聯的目標實體外鍵值被設為null。

(3)Cascade:主體被刪除時,關聯的目標實體也被級聯刪除。

(4)Deny:主體試圖被刪除時,如果關聯的目標實體依然存在,刪除失敗——必須先刪除目標實體然后刪除主體。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,321評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,559評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,442評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,835評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,581評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,922評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,931評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,096評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,639評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,374評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,591評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,104評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,789評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,196評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,524評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,322評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,554評論 2 379

推薦閱讀更多精彩內容