NSManagedObject:模型對象,或者叫實體(entity),可理解爲OC裏的對象。sql
NSManagedObjectModel:模型文件(.xcdatamodeld),記錄全部的模型對象及對象的屬性數據庫
一、應用程序先建立或讀取模型文件(後綴爲xcdatamodeld)生成 NSManagedObjectModel 對象。 Document應⽤程序是通常是經過 NSDocument 或其子類 NSPersistentDocument)從模型文件(後綴爲 xcdatamodeld)讀取。
二、而後⽣成 NSManagedObjectContext 和 NSPersistentStoreCoordinator 對象,前者對用戶透明地調用後 者對數據文件進行讀寫。app
三、NSPersistentStoreCoordinator 負責從數據文件(xml, sqlite,⼆進制⽂件等)中讀取數據⽣成 Managed Object,或保存 Managed Object 寫入數據⽂文件。
四、NSManagedObjectContext 參與對數據進行各類操做的整個過程,它持有 Managed Object。咱們經過它 來監測 Managed Object。監測數據對象有兩個做⽤:支持 undo/redo 以及數據綁定。這個類是最常被⽤用到 的。框架
五、Array Controller, Object Controller, Tree Controller 這些控制器⼀般與 NSManagedObjectContext 關聯, 所以咱們能夠經過它們在 nib 中可視化地操做數據對象。fetch
2、Core Data的使用spa
按如下步驟:代理
按如下步驟:code
生成上下文, 關聯模型文件生成數據庫orm
導入頭文件 #import <CoreData/CoreData.h>
sqlite
1.初始化NSManagedObjectModel對象, 加載模型文件, 讀取app中的全部實體信息;
2.初始化NSPersistentStoreCoordinator對象, 添加持久化庫(這裏採起SQLite數據庫);
3.初始化NSManagedObjectContext對象, 拿到這個上下文對象操做實體, 進行CRUD操做.
得到AppDelegate的代理對象
AppDelegate *delegate = [UIApplication sharedApplication].delegate;
添加實體對象
// 建立實體對象 // NSEntityDescription *entity = [NSEntityDescription entityForName:@"User" inManagedObjectContext:delegate.managedObjectContext]; //添加一個實體對象到 managedObjectContext 中 User *user = [NSEntityDescription insertNewObjectForEntityForName:@"User" inManagedObjectContext:delegate.managedObjectContext]; user.userID = @10002; user.userName = @"懷化"; user.userAge = @30; user.userSex = @"男"; user.userDate = [NSDate date];
保存上下文:
[delegate saveContext];
建立一個取值請求:
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"User"];
使用謂詞設置查詢條件:
request.predicate = [NSPredicate predicateWithFormat:@"userAge < 35"]; request.predicate = [NSPredicate predicateWithFormat:@"userName LIKE '*楊*'"];
設置查詢的條數:
request.fetchLimit = 2;
指定從某個位置開始查詢(分頁效果)
request.fetchOffset = 2;
按某個字段升序、降序排列(YES爲升序,NO爲降序)
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"userAge" ascending:YES]; request.sortDescriptors = @[sort];
在上下文中執行取值請求:
NSArray *objects = [delegate.managedObjectContext executeFetchRequest:request error:&error]; [objects enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { User *user = (User *)obj; NSLog(@"%@ %@ %@ %@ %@",user.userID, user.userName, user.userAge, user.userSex, user.userDate); }];
以下NSFetchRequest 經常使用方法:
-setEntity: | 設置你要查詢的數據對象的類型(Entity) |
-setPredicate: | 設置查詢條件 |
-setFetchLimit: | 設置最大查詢對象數目 |
-setSortDescriptors: | 設置查詢結果的排序方法 |
-setAffectedStores: | 設置能夠在哪些數據存儲中查詢 |
查詢:
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"User"]; request.predicate = [NSPredicate predicateWithFormat:@"userID == '10005'"]; NSArray *objects = [delegate.managedObjectContext executeFetchRequest:request error:nil];
修改:
[objects enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { User *user = (User *)obj; user.userDate = [NSDate date]; //保存 [delegate saveContext]; }
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"User"]; request.predicate = [NSPredicate predicateWithFormat:@"userID == '10005'"]; NSArray *objects = [delegate.managedObjectContext executeFetchRequest:request error:nil]; [objects enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { //刪除 [delegate.managedObjectContext deleteObject:obj]; // 保存 [delegate saveContext]; }];