1. 建立項目
2. 建立CoreDataManager來管理
MTCoreDataManager.h檔案
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@interface MTCoreDataManager : NSObject
// 建立一個管理對象上下文
@property (nonatomic, strong) NSManagedObjectContext *managerContext;
// 單例
+ (instancetype)sharedManager;
@end
MTCoreDataManager.m檔案
#import "MTCoreDataManager.h"
@implementation MTCoreDataManager
static MTCoreDataManager *sharedManager;
// 單例
+ (instancetype)sharedManager {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedManager = [MTCoreDataManager new];
});
return sharedManager;
}
// 建立一個管理對象上下文
- (NSManagedObjectContext *)managerContext {
if (_managerContext == nil) {
// 建立對象
_managerContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
// 給上下文設定持久化存儲協調器
// 模型檔案url
NSURL *url = [[NSBundle mainBundle] URLForResource:@"Person" withExtension:@"momd"];
// 根據url擷取到模型檔案
NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:url];
// 設定模型檔案
NSPersistentStoreCoordinator *persitent = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
// 資料路徑放置在沙盒
NSArray *documentArr = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES);
NSString *documentPath = [[documentArr firstObject] stringByAppendingPathComponent:@"person.db"];
NSLog(@"%@", documentPath);
// 擷取檔案路徑的url
NSURL *pathUrl = [NSURL fileURLWithPath:documentPath];
// 添加資料庫檔案路徑
[persitent addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:pathUrl options:nil error:nil];
// 設定持久化存儲協調器
[_managerContext setPersistentStoreCoordinator:persitent];
}
return _managerContext;
}
@end
3. 建立CoreData
右鍵項目->New File...->Core Data->Data Model->修改類名->點選create.

圖1.png
4. 建立實體類
點選上一步建立的Person.xcdatamodeld檔案,選擇左下角的Add Entity,接下來自己可修改實體名,并在右側添加屬性。
圖2.png
5. 建立NSManagedObjectModel實體類
右鍵項目->Core Data->NSManagedObjectObject subclass->選擇Person->next->next->create。建立好之後項目結構如下:
6. 插入資料
// 插入
- (IBAction)insert {
// 通過實體描述出實體對象
Person *person = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:[MTCoreDataManager sharedManager].managerContext];
person.name = @"mazaiting";
person.age = @(24);
// 送出資料
[[MTCoreDataManager sharedManager].managerContext save:nil];
NSLog(@"插入成功");
}
7. 查詢資料
// 查詢
- (IBAction)fetch {
// 查詢請求
NSFetchRequest *request = [[NSFetchRequest alloc] init];
// 設定參數
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:[MTCoreDataManager sharedManager].managerContext];
// 設定實體
request.entity = entity;
// 謂詞--類似于sql中的where
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age = %d", 24];
// 設定謂詞
request.predicate = predicate;
// 排序
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES];
// 設定排序
request.sortDescriptors = @[sort];
// 執行查詢請求
NSArray *arr = [[MTCoreDataManager sharedManager].managerContext executeFetchRequest:request error:nil];
if (arr.count == 0) {
NSLog(@"表中無資料");
}
// 列印結果
for (Person *person in arr) {
NSLog(@"name: %@, age: %@", person.name, person.age);
}
}
8. 更新資料
// 更新
- (IBAction)update {
// 建立請求
NSFetchRequest *request = [[NSFetchRequest alloc] init];
// 設定參數
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:[MTCoreDataManager sharedManager].managerContext];
// 設定實體
request.entity = entity;
// 設定謂詞
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age = %d", 24];
request.predicate = predicate;
// 執行請求
NSArray *arr = [[MTCoreDataManager sharedManager].managerContext executeFetchRequest:request error:nil];
for (Person *person in arr) {
person.name = @"zaiting";
}
[[MTCoreDataManager sharedManager].managerContext save:nil];
NSLog(@"更新成功");
}
9. 删除資料
// 删除
- (IBAction)delete {
// 建立請求
NSFetchRequest *request = [[NSFetchRequest alloc] init];
// 擷取實體
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:[MTCoreDataManager sharedManager].managerContext];
// 設定實體
request.entity = entity;
// 建立謂詞
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age = %d", 24];
// 設定謂詞
request.predicate = predicate;
// 執行指令
NSArray *arr = [[MTCoreDataManager sharedManager].managerContext executeFetchRequest:request error:nil];
for (Person *person in arr) {
[[MTCoreDataManager sharedManager].managerContext deleteObject:person];
}
NSLog(@"删除成功");
}
10. 整個流程列印
圖3.png