CoreData的简单介绍

/ 0评 / 0

CoreData是苹果推出的新型数据持久化方式,然而各种坑你懂得,这里只简单说一下简单的操作。

1.创建一个coredata文件
2.创建一个表(右下角add entry)
3.创建实体类(选择coredata->nsmana...subclass)

基本步骤:
1.创建模型文件(相当于一个数据库里的表)
2.添加一个实体 (一张表)
3.创建实体类(相当于模型)
4.生成上下文 关联模型文件生成的数据库(关联的时候如果本地没有数据库,CoreData自己会创建)

//  声明上下文
NSManagedObjectContext *context = [[NSManagedObjectContext alloc] init];

//  上下文关联数据库
NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];

// 持久化存储调度器
NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];

//告诉CoreData数据库的名字和路径
NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *sqlPath = [doc stringByAppendingPathComponent:@"test.sqlite"];

 NSLog(@"=======%@",sqlPath);

[store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:sqlPath] options:nil error:nil];

context.persistentStoreCoordinator = store;

//增删改查CRUB

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.


//  声明上下文
    NSManagedObjectContext *context = [[NSManagedObjectContext alloc] init];

//  上下文关联数据库


    NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];

    // 持久化存储调度器
    NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];

    //告诉CoreData数据库的名字和路径
    NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *sqlPath = [doc stringByAppendingPathComponent:@"test.sqlite"];

    NSLog(@"=======%@",sqlPath);

    [store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:sqlPath] options:nil error:nil];


    context.persistentStoreCoordinator = store;


    _content = context;



}

#pragma mark 添加人
- (IBAction)addPerson{

//    创建一个人
//    Person *per = [[Person alloc] init];
    Person *per = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:_content];
    per.name = @"张三";
    per.age = @11;
    per.height = @1.75;

//   保存

    NSError *error = nil;
    [_content save:&error];

    if (error) {
        NSLog(@"%@",error);
    }else{
        NSLog(@"success");
    }


}

#pragma mark 读取员工

- (IBAction)readPerson:(id)sender{

//    1.抓取请求对象
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"];



//    2.设置过滤条件
    NSPredicate *pre = [NSPredicate predicateWithFormat:@"name = %@",@"张三"];
//    request.predicate = pre;


//    3.设置排序
//    身高的升序排序
    NSSortDescriptor *heightSort = [NSSortDescriptor sortDescriptorWithKey:@"height" ascending:YES];
//    若想降序,直接把YES改为NO



    request.sortDescriptors = @[heightSort];


//    4.执行请求
    NSError *error = nil;
    NSArray *array = [_content executeFetchRequest:request error:&error];


    if (error) {
        NSLog(@"%@",error);
    }else{
        NSLog(@"success\n");
//        NSLog(@"%@",array);
        for (int i = 0; i < array.count; i++) {
            Person *person = array[i];
            NSLog(@"name = %@",person.name);
        }
    }

}

- (IBAction)updatePerson:(id)sender{


//   1. 查找到张三

    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"];
    NSPredicate *pre = [NSPredicate predicateWithFormat:@"name = %@",@"张三"];
    request.predicate = pre;

    NSError *error = nil;
    NSArray *arr = [_content executeFetchRequest:request error:&error];
    if (error) {
        NSLog(@"%@",error);
    }else{
        NSLog(@"select success");
    }


//   2. 更新身高
    for (Person *per in arr) {
        per.height = @2.0;
    }

//   3. 保存
    [_content save:&error];
    if (error) {
        NSLog(@"%@",error);
    }else{
        NSLog(@"update success");
    }

}

- (IBAction)deletePerson:(id)sender{

    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"];
    NSPredicate *pre = [NSPredicate predicateWithFormat:@"name = %@",@"李四"];
    request.predicate = pre;

    NSError *error = nil;
    NSArray *arr = [_content executeFetchRequest:request error:&error];
    if (error) {
        NSLog(@"%@",arr);
    }

    for (Person *per in arr) {
        [_content deleteObject:per];
    }


    [_content save:&error];
    if (error) {
        NSLog(@"%@",error);
    }
}

评论已关闭。