一、設計實體模型(打開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:主體試圖被刪除時,如果關聯的目標實體依然存在,刪除失敗——必須先刪除目標實體然后刪除主體。