CoreData的簡單使用

 一.CoreData

####1.CoreData用於作數據持久化,適合大數據量的存儲和查詢;數據庫

####2.CoreData不是數據庫,CoreData能夠使用數據庫,XML等方式來存儲數據;框架

####3.SQLite經過SQL語句操做數據,CoreData使用面向對象的方式操做數據;fetch

####4.使用CoreData操做數據,不須要寫任何SQL語句;大數據

####5.使用CoreData,須要導入CoreData框架.net

二.CoreData核心對象

(https://static.oschina.net/uploads/img/201609/03185446_dVwX.png "CoreData核心對象的關係")code

NSManagedObject:模型對象,或者叫實體(entity),可理解爲OC⾥裏的對象。

NSManagedObjectModel:模型⽂文件(.xcdatamodeld),記錄全部的模型對象及對象的屬性.

NSPersistentStoreCoordinator:持久化存儲協調者,是數據庫和程序之間的橋樑, ⽤用來設置數據存儲的名字,位置,存儲⽅方式,和存儲時機。⽤用來執⾏行具體的CRUD操做。

NSManagedObjectContext:對象管理上下⽂文,⽤用戶全部的持久化操做都是經過此 對象。再由此對象去調⽤用NSPersistentStoreCoordinator對象執⾏行具體的操做。

實體管理類:NSManagedObjectorm

實體描述類:NSEntityDescription對象

數據管理器類:NSManagedObjectContextip

數據鏈接器類:NSPersistentStoreCoordinatorget

數據模型器類:NSManagedObjectModel

構建流程:

1.如果新建的工程,選擇空白應用程序,next

2.勾選Use Core Data選項

此時生成的工程文件AppDelegate中,會自動生成被管理的數據上下文等相關代碼

1.添加元素:

// 一、添加一個實體對象到 managedObjectContext 中
    User *user = [NSEntityDescription insertNewObjectForEntityForName:@"User" inManagedObjectContext:delegate.managedObjectContext];
    user.userID = @"10002";
    user.userName = @"懷化";
    user.userAge = @30;
    user.userSex = @"男";
    user.saveDate = [NSDate date];
    
    // 二、保存上下文
    [delegate saveContext];
}

2.查詢:

// 一、建立一個取值請求
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"User"];
    
    // 使用謂詞設置查詢條件
    // request.predicate = [NSPredicate predicateWithFormat:@"userAge < 35"];
    // request.predicate = [NSPredicate predicateWithFormat:@"userName LIKE '*楊*'"];
    
    // 設置查詢的條數
    request.fetchLimit = 2;
    
    // 指定到某個位置開始查詢(分頁效果)
    request.fetchOffset = 2;
    
    // 按某個字段升序、降序排列
    NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"userAge" ascending:YES];
    request.sortDescriptors = @[sort];
    
    NSError *error = nil;
    // 二、在上下文中執行取值請求
    NSArray *objects = [delegate.managedObjectContext executeFetchRequest:request error:&error];

    [objects enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
       
        User *user = (User *)obj;

3.刪除:

// 一、查詢
    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];

4.更新:

// 一、查詢
    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.saveDate = [NSDate date];
        
        // 三、保存
        [delegate saveContext];
相關文章
相關標籤/搜索