首先介绍一下CoreData的主要对象,接下来是一个案例分解步骤和整体实现。
CoreData主要对象
1.Managed Object Context (管理数据内容):
操作实际内容(操作持久层)
作用:插入数据,查询数据,删除数据
2.Managed Object Model (管理数据模型):
数据库所有数据表格或数据结构,包含各实体的定义信息
作用:添加实体的属性,建立属性之间的关系
操作方法:视图编辑器 或 代码
3.Persistent Store Coordinator (持久性数据协调器):
相当于数据库的连接器
作用:设置数据存储的名字,位置,存储方式,存储时机
4.Managed Object:
相当于数据库中的表格记录
5.NSFetchRequest (获取数据的请求):
相当于查询语句
6.NSEntityDescription (实体结构):
相当于表格结构
7.后缀为.xcdatamodeld的包:
里面是.xcdatamodeld文件,用数据模型编辑器编辑
编译后为.momd或.mom文件
在CoreData中有几个概念要清楚Model,Entity,Attribute,Relationship.
可以简单地用关系数据库的概念来解释:Model为database,Entity对应一张表,Attibute为表中的字段,relationship为关系。
1.创建上下文
NSManagedObjectContext * context=[[NSManagedObjectContextalloc]init];
context.persistentStoreCoordinator=psc;
2.创建基础库协调器
NSPersistentStoreCoordinator * psc=[[NSPersistentStoreCoordinatoralloc]initWithManagedObjectModel:model];
3.初始化模型
NSManagedObjectModel * model=[NSManagedObjectModelmergedModelFromBundles:nil];
4.为协调器添加基础库路径和基础库类型
[psc addPersistentStoreWithType:NSSQLiteStoreTypeconfiguration:nilURL:urloptions:nilerror:nil];
5.获取沙盒路径
NSString * path=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)firstObject];
path=[path stringByAppendingPathComponent:@"Info.sqlite"];
NSLog(@"%@",path);
6.拼接URL
NSURL * url=[[NSURLalloc]initFileURLWithPath:path];
7.创建表 - - - 插入数据
NSManagedObject * student=[NSEntityDescriptioninsertNewObjectForEntityForName:@"Student"inManagedObjectContext:context];
[studentsetValue:@"zhangsan"forKey:@"name"];
[studentsetValue:@13forKey:@"age"];
8.创建第二个表
NSManagedObject * book=[NSEntityDescriptioninsertNewObjectForEntityForName:@"Book"inManagedObjectContext:context];
[book setValue:@"pipigou"forKey:@"name"];
[book setValue:@"jiang"forKey:@"author"];
[booksetValue:@10forKey:@"price"];
9.保存
NSError * error;
[contextsave:&error];
完整代码如下:
- (void)viewDidLoad {
[superviewDidLoad];
// 3>初始化模型
NSManagedObjectModel * model=[NSManagedObjectModelmergedModelFromBundles:nil];
// 2>创建基础库协调器
NSPersistentStoreCoordinator * psc=[[NSPersistentStoreCoordinatoralloc]initWithManagedObjectModel:model];
// 5>获取沙盒路径
NSString * path=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)firstObject];
path=[path stringByAppendingPathComponent:@"Info.sqlite"];
NSLog(@"%@",path);
// 6>拼接URL
NSURL * url=[[NSURLalloc]initFileURLWithPath:path];
// 4>为协调器添加基础库路径和基础库类型
[psc addPersistentStoreWithType:NSSQLiteStoreTypeconfiguration:nilURL:urloptions:nilerror:nil];
// 1>创建上下文
NSManagedObjectContext * context=[[NSManagedObjectContextalloc]init];
context.persistentStoreCoordinator=psc;
// 7>插入数据 ---创建表
NSManagedObject * student=[NSEntityDescriptioninsertNewObjectForEntityForName:@"Student"inManagedObjectContext:context];
//插入数据
[studentsetValue:@"zhangsan"forKey:@"name"];
[studentsetValue:@13forKey:@"age"];
// 8>创建第二个表
NSManagedObject * book=[NSEntityDescriptioninsertNewObjectForEntityForName:@"Book"inManagedObjectContext:context];
[book setValue:@"pipigou"forKey:@"name"];
[book setValue:@"jiang"forKey:@"author"];
[booksetValue:@10forKey:@"price"];
// 6>保存
NSError * error;
[contextsave:&error];
}