在上篇博客中,讲了数据模型和 CoreData 栈的创建,那下一步就是对数据的操作了。和数据库一样,CoreData 里的操作也无非是增删改查。下面我们将逐步讲解在 CoreData 中进行增删改查的方式。
基本的增删改查
插入条目
先来看一下插入条目的方式,在插入之前,我们需要先创建要插入的数据, 使用 NSEntityDesctiption
类的 + (__kindof NSManagedObject *)insertNewObjectForEntityForName:(NSString *)entityName inManagedObjectContext:(NSManagedObjectContext *)context;
方法来创建一个新的 NSManagedObject
对象,入参分别是 entityName
和 managedObjectContext
,entityName
也就是实体类的名字,例如,我要插入一条新的 Student
字段,entityName
就是 @”Student”;
context
是 NSManagedObjectContext
对象,新增的实体类对象会添加到对应的 context
上下文对象中。这个方法返回的是一个 NSManagedObject
实例,可以根据具体情况转换成相应的子类:
Student *student = [NSEntityDescription insertNewObjectForEntityForName:@"Student" inManagedObjectContext:self.context];
student.studentName = @"小明";
student.studentId = 1;
student.studentAge = 20;
NSError *error;
[self.context save:&error];
调用 save
方法时,可以传入一个 NSError
的指针,如果数据保存出错的话,错误信息会保存到 error
里,这也是 Objective-C
里通常处理错误的方式。
查询条目
从数据库中查询数据,会用到三个类:NSFetchRequest
,NSPredicate
,NSSortDescriptor
,分别说一下这三个类的作用:
- NSFetchRequest — fetchRequest 代表了一条查询请求,相当于 SQL 中的 SELECT 语句
- NSPredicate — predicate 翻译过来是谓词的意思,它可以指定一些查询条件,相当于 SQL 中的 WHERE 子句,有关 NSPredicate 的用法,可以看我之前写过的一篇文章: