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);
}
}