CoreData的使用

這邊我將如何使用CoreData的示例代碼記錄下來,不再截圖說明如何創建model模型了,截圖上傳麻煩(公司網限速)

#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
#import "Student+CoreDataClass.h"


@interface CQ_CoreDataSource : NSObject

- (BOOL)insertDataWithModel:(Student *)model;

- (BOOL)delegateWithKey:(NSString *)key predicate:(id)pre;


- (BOOL)updateWithKey:(NSString *)key predicate:(NSString *)pre NewValue:(NSString *)NewValue;

- (NSArray *)readDatWithKey:(NSString *)Key predicate:(NSString *)pre;

-(NSArray *)sortData;
@end

下面是.m中的實現代碼

#import "CQ_CoreDataSource.h"

@interface CQ_CoreDataSource ()
{
    NSManagedObjectContext * _context;
    NSMutableArray * _dataSource;
}
@end

@implementation CQ_CoreDataSource
- (instancetype)init
{
    if (self = [super init]) {
        [self creatSqlite];
    }
    return self;
}

- (void)creatSqlite{
    //創建模型對象
    //獲取模型路徑
    NSURL *modelUrl = [[NSBundle mainBundle]URLForResource:@"Model" withExtension:@"momd"];

    //根據模型文件創建模型對象
    NSManagedObjectModel *model = [[NSManagedObjectModel alloc]initWithContentsOfURL:modelUrl];
    //創建持久化存儲助理:數據庫
    NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc]initWithManagedObjectModel:model];

    //數據庫的名稱和路徑
    NSString *docStr = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *sqlitePath = [docStr stringByAppendingPathComponent:@"coreData.sqlite"];
    NSLog(@"數據庫 path = %@", sqlitePath);
    NSURL *sqlUrl = [NSURL fileURLWithPath:sqlitePath];
    NSError *error = nil;
    [store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:sqlUrl options:nil error:&error];
    if (error) {
        NSLog(@"添加數據庫失敗:%@",error);
    }else
    {
         NSLog(@"添加數據庫成功");
    }

    //創建上下文 保存信息,操作數據庫
    NSManagedObjectContext *context = [[NSManagedObjectContext alloc]initWithConcurrencyType:NSMainQueueConcurrencyType];
    //關聯持久化助理
    context.persistentStoreCoordinator = store;

    _context = context;


}


- (BOOL)insertDataWithModel:(Student *)model
{
    Student *student = [NSEntityDescription insertNewObjectForEntityForName:@"Student" inManagedObjectContext:_context];

    student.age = 10;
    student.name = @"陳強";
    student.sex = @"M";
    student.height = 179;
    student.number = 90;

    NSError *error = nil;
    if ([_context save:&error]) {
        NSLog(@"插入數據庫成功");
        return YES;
    }else{
        NSLog(@"插入數據庫失敗");
        return NO;
    }
}


- (BOOL)delegateWithKey:(NSString *)key predicate:(id)pre{

    //創建刪除請求
    NSFetchRequest *deleRequest = [NSFetchRequest fetchRequestWithEntityName:@"Student"];
    //刪除條件
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age < %d",11];
    deleRequest.predicate = predicate;

    //返回需要刪除的對象數組
    NSArray *deleArray = [_context executeFetchRequest:deleRequest error:nil];

    //從數據庫中刪除
    for (Student *stu in deleArray) {
        [_context deleteObject:stu];
    }

    NSError *error = nil;
    //保存--記住保存
    if ([_context save:&error]) {
       NSLog(@"刪除 age < 10 的數據");
        return YES;
    }else{
        NSLog(@"刪除數據失敗, %@", error);
        return NO;
    }
}


- (BOOL)updateWithKey:(NSString *)key predicate:(NSString *)pre NewValue:(NSString *)NewValue
{
    NSString *str = [NSString stringWithFormat:@"%@ == '%@'",key,pre];

    //創建查詢請求
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Student"];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:str];
    request.predicate = predicate;
    //發送請求
    NSArray *resArray = [_context executeFetchRequest:request error:nil];

    //修改
    for (Student *stu in resArray) {
        stu.name = NewValue;
    }

    //保存
    NSError *error = nil;
    if ([_context save:&error]) {
        NSLog(@"保存成功");
        return YES;
    }else{
        NSLog(@"保存失敗");
        return NO;
    }

}


- (NSArray *)readDatWithKey:(NSString *)Key predicate:(NSString *)pre
{
    //創建查詢請求
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Student"];
    //查詢條件
    NSString *str = [NSString stringWithFormat:@"%@ == '%@'",Key,pre];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:str];
    request.predicate = predicate;

//    //從第幾頁開始查詢
//    request.fetchOffset = 0;
//    
//    //每頁顯示多少條數據
//    request.fetchLimit = 6;
//    
    NSArray *array = [_context executeFetchRequest:request error:nil];

    return array;
}


-(NSArray *)sortData{
    //創建排序請求
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Student"];

    //實例化排序對象
    NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES];
    NSSortDescriptor *number = [NSSortDescriptor sortDescriptorWithKey:@"number" ascending:YES];
    request.sortDescriptors = @[sort,number];

    //發送請求
    NSError *error = nil;
    NSArray *resArray = [_context executeFetchRequest:request error:&error];


    if (error == nil) {
        NSLog(@"排序成功");
    }else
    {
        NSLog(@"排序失敗");
    }
    return resArray;

}

上面的搜索過濾條件是我自己隨意寫的,自己根據項目需要修改,等週末無事時,我在講完整的如何創建model模型的圖文補上,結合起來在看會比較輕鬆點,

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章