CoreData核心物件
- 實體管理類:NSManagedObject
- 實體描述類:NSEntityDescription
- 資料管理器類:NSManagedObjectContext
- 資料聯結器類:NSPersistentStoreCoordinator
- 資料模型器類:NSManagedObjectModel
CoreData核心類的關係
CoreData資料框架的核心物件
持久化儲存和儲存檔案
- NSPersistentStore:持久化資料儲存,是對實際檔案的一種Objective-C的一種表示方式,一個被封裝好的底層類,用於儲存資料。
被管理上下文
- NSManagedObjectContext被管理物件上下文,在CoreData中用於操作和使用資料,負責應用和資料庫之間的互動。
- 資料庫的儲存需要NSManagedObjectContext進行save操作。
- 資料的查詢需要NSManagedObjectContext進行executeFetchRequest操作,返回值是陣列。
- CoreData提供的是物件關係對映,NSManagedObjectContext操作的都是NSManagedObject物件。
被管理物件相關類
- NSManagedObjectMode:被管理物件模型,管理多個物件。
- NSManagedObject:被管理物件,CoreData返回的資料模型,被管理的物件是根據實體描述生成的。
- NSEntityDescription:實體描述類根據實體建立被管理物件。
- Entity:實體類,實體是對檔案資料的描述,被管理物件標表示實體,實體包含名稱,屬性(欄位)和關係,實體的名稱通常被管理物件名稱一致。
資料查詢
- NSFetchRequest:查詢請求,可以做排序操作,也可以使用謂詞。
- NSManagedObjectContext:根據NSFetchRequest查詢資料,以陣列形式返回,陣列中包含被管理物件(NSManagedObject)。
- NSSortDescriptor:排序操作。
資料持久化的過程
- 持久化資料的過程:context上下文將對被管理物件的子類進行的所有操作(包括增加,刪除,更新等)進行持久化的時候(呼叫save方法的時候),將所有的操作交給持久化資料協調器(persistentStoreCoordinator),persistentStoreCoordinator(持久化資料協調器)會把物件型別的資料轉化成二進位制型別的資料,然後儲存到檔案系統中。
- 讀取過程:持久化資料協調器(persistentStoreCoordinator)從檔案系統中讀取出二進位制的資料,根據實體物件轉換成對應的物件型別。將轉換好的資料交給上下文來操作。
示例程式碼
往資料庫中新增元素
- (void)addObject{
NSEntityDescription *description = [NSEntityDescription entityForName:@"Student" inManagedObjectContext:self.delegate.managedObjectContext];
Student *stu = [[Student alloc]initWithEntity:description insertIntoManagedObjectContext:self.delegate.managedObjectContext];
stu.name = @"小明";
stu.gender = @"男";
[self.delegate saveContext];
NSLog(@"%@",NSHomeDirectory());
}
複製程式碼
修改元素
- (void)changeFromCoreData{
NSFetchRequest *request = [[NSFetchRequest alloc]initWithEntityName:@"Student"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@",@"小明"];
request.predicate = predicate;
NSArray *array = [self.delegate.managedObjectContext executeFetchRequest:request error:nil];
for (Student *stu in array) {
stu.name = @"小李";
}
[self.delegate saveContext];
}
複製程式碼
刪除元素
- (void)delegateFromCoreData{
NSFetchRequest *request = [[NSFetchRequest alloc]initWithEntityName:@"Student"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@",@"小明"];
request.predicate = predicate;
NSArray *array = [self.delegate.managedObjectContext executeFetchRequest:request error:nil];
for (Student *stu in array) {
[self.delegate.managedObjectContext deleteObject:stu];
}
[self.delegate saveContext];
}
複製程式碼
查詢元素
- (void)selectFromCoreData{
NSFetchRequest *request = [[NSFetchRequest alloc]initWithEntityName:@"Student"];
NSArray *array = [self.delegate.managedObjectContext executeFetchRequest:request error:nil];
NSLog(@"%@",array);
}
複製程式碼