UISenior 之 CoreData初级

CoreData简介:

CoreData用于数据持久化,适合大数据量的存储和查询,但要注意的一点是CoreData不是数据库,而是用来管理数据库的一套框架,CoreData可以使用数据库、XML等方式来存储数据。可以在Xcode上进行表的设计,或使用Instruments进行性能检测,可以直接生成高质量的代码。

CoreData的主要对象:

1)NSManagedObjectContext(被管理的数据上下文)
操作实际内容(操作持久层)
作用:插入数据,查询数据,删除数据,修改数据
(2)NSManagedObjectModel(被管理的数据模型)
数据库所有表格或数据结构,包含各实体的定义信息
作用:添加实体的属性,建立属性之间的关系
操作方法:视图编辑器,或代码
(3)NSPersistentStoreCoordinator(持久化存储助理)
相当于数据库的连接器
作用:设置数据存储的名字,位置,存储方式,和存储时机
(4)NSManagedObject(被管理的数据记录)
相当于数据库中的表格记录
(5)NSFetchRequest(获取数据的请求)
相当于查询语句
(6)NSEntityDescription(实体结构)
相当于表格结构

作用:创建entity实体

在CoreData中创建类和属性:

创建工程时一定不要忘记勾选Use Core Data ,勾选完这个选项在Appdelegate.m的文件中会自动生成操作CoreData的方法

在工程的文件夹列表里找到.xcdatamodeled文件选中

点击左下角的Add Entity 创建entity实体

创建的实体的命名规则遵循驼峰命名法 注意首字母必须大写



创建完实体后 在Attribute中添加属性 注意属性的名字的首字母必须小写

然后就Command+N创建文件

切记勾选



创建完成后出现下列文件夹



这样实体在xcdatamodeled文件中就创建完成了,接着在代码中实现

Appdelegate.m文件中封装了一些方法

获取Documents的路径

- (NSURL *)applicationDocumentsDirectory

获取管理对象

- (NSManagedObjectModel *)managedObjectModel

 数据库持久化协调器(真正干活的)

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator

获取数据库上下文

- (NSManagedObjectContext *)managedObjectContext

保存Context

- (void)saveContext

ViewController.m里开写要操作的代码

//第一步:引入头文件appdelegate
#import "AppDelegate.h"
#import "Person.h"


//第二步:在延展中声明属性(管理对象上下文)[sqlite中是声明一个存储路径属性]

@property(nonatomic, strong)NSManagedObjectContext *managedObjectContext;


懒加载:

- (NSManagedObjectContext *)managedObjectContext {
//    因为在Appdelegate中已经实现过了,所以在这里是从Appdelegate中去获取
    if (_managedObjectContext == nil) {
//        获取appDelegate对象
        AppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
        _managedObjectContext = appDelegate.managedObjectContext;
    }
    return _managedObjectContext;
}

调用方法
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
//    添加person
    [self addPerson];
    
//    删除person
    [self deletePerson];
    
//    更改person信息
    [self updatePerson];
    
//    查询数据
    [self selectAllPerson];
    
//    更改car的信息
    [self updateCar];
    
}

添加Person

- (void)addPerson {
//    添加的步骤
//    1.创建person实体对象,然后告诉“context”,让他做好准备,将这个对象添加到数据库中
//    实例对象有两种方式[初始化实体对象需要借用 NSEntityDescription]
//    第一种:
//    Person *per = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:self.managedObjectContext];
//    第二种
//    创建一个entity的实体
    NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:self.managedObjectContext];
//    创建Person对象
    Person *per = [[Person alloc] initWithEntity:entityDescription insertIntoManagedObjectContext:self.managedObjectContext];
//    2.给对象属性赋值
    per.personName = @"MBboy";
    per.personGender = @"unKnow";
    per.personAge = @30;
    
//    3.将person对象存入数据库
    BOOL result = [_managedObjectContext save:nil];
//    4.判断是否插入成功
    if (result) {
        NSLog(@"添加数据成功");
    } else {
        NSLog(@"添加数据失败");
    }
}

删除person

- (void)deletePerson {
//  第一步:实体化请求类【查询】(NSFetchRequest)
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"];
//   第二步:找到删除的条件(即根据什么进行删除)NSPredicate
    request.predicate = [NSPredicate predicateWithFormat:@"personName = 'MBboy'"];
//   第三步:由context根据删除条件的请求去具体进行删除操作
    NSArray *resultArray = [self.managedObjectContext executeFetchRequest:request error:nil];
//    第四步:遍历数组
    for (Person *per in resultArray) {
//        删除查询到的相关的人的信息
        [self.managedObjectContext deleteObject:per];
    }
//    第五步:进行删除结果的判断
    BOOL result = [_managedObjectContext save:nil];
    if (result) {
        NSLog(@"删除成功");
    } else {
        NSLog(@"删除失败");
    }
}

更改信息

- (void)updatePerson {
//    1.实例化查询请求类
    NSFetchRequest *requeset = [NSFetchRequest fetchRequestWithEntityName:@"Person"];
//    2.设置条件
    requeset.predicate = [NSPredicate predicateWithFormat:@"personName = 'MBboy'"];
//    3.由context按照查询条件进行相关的操作
    NSArray *resultArray = [self.managedObjectContext executeFetchRequest:requeset error:nil];
//    4.遍历数组更新相关的信息
    for (Person *per in resultArray) {
//        更改相关的信息
        per.personName = @"小强";
        per.personGender = @"boy";
        per.personAge = @38;
        NSLog(@"name = %@, gender = %@ age = %@", per.personName, per.personGender, per.personAge);
    }
//    5.进行更新结果的判断
    BOOL result = [self.managedObjectContext save:nil];
    if (result) {
        NSLog(@"更新成功");
    } else {
        NSLog(@"更新失败");
    }
}


查询信息

- (void)selectAllPerson {
//    1.实例化查询请求
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"];
//    2.设置查询条件
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"personName LIKE '*强'"];
    request.predicate = predicate;
//    3.根据管理对象上下文执行相关的操作
    NSArray *resultArray = [self.managedObjectContext executeFetchRequest:request error:nil];
//    4.遍历查询结果
    for (Person *per in resultArray) {
        NSLog(@"name = %@ gender = %@ age = %@", per.personName, per.personGender, per.personAge);
    }
}



你可能感兴趣的:(UISenior 之 CoreData初级)