Persistent Object Store:可以理解为存储持久对象的数据库(例如SQLite,注意Core Data也支持其他类型的数据存储,例如xml、二进制数据等)。
Managed Object Model:对象模型,对应Xcode中创建的模型文件。
Persistent Store Coordinator:对象模型和实体类之间的转换协调器,用于管理不同存储对象的上下文。
Managed Object Context:对象管理上下文,负责实体对象和数据库之间的交互。
Core Data使用
Core Data使用起来相对直接使用SQLite3的API而言更加的面向对象,操作过程通常分为以下几个步骤:
1.创建管理上下文
创建管理上下可以细分为:加载模型文件->指定数据存储路径->创建对应数据类型的存储->创建管理对象上下方并指定存储。
经过这几个步骤之后可以得到管理对象上下文NSManagedObjectContext,以后所有的数据操作都由此对象负责。同时如果是第一次创建上下文,Core Data会自动创建存储文件(例如这里使用SQLite3存储),并且根据模型对象创建对应的表结构。下图为第一次运行生成的数据库及相关映射文件:
为了方便后面使用,NSManagedObjectContext对象可以作为单例或静态属性来保存,下面是创建的管理对象上下文的主要代码:
-(NSManagedObjectContext *)createDbContext{
NSManagedObjectContext *context;
//打开模型文件,参数为nil则打开包中所有模型文件并合并成一个
NSManagedObjectModel *model=[NSManagedObjectModel mergedModelFromBundles:nil];
//创建解析器
NSPersistentStoreCoordinator *storeCoordinator=[[NSPersistentStoreCoordinator alloc]initWithManagedObjectModel:model];
//创建数据库保存路径
NSString *dir=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
NSLog(@"%@",dir);
NSString *path=[dir stringByAppendingPathComponent:@"myDatabase.db"];
NSURL *url=[NSURL fileURLWithPath:path];
//添加SQLite持久存储到解析器
NSError *error;
[storeCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:&error];
if(error){
NSLog(@"数据库打开失败!错误:%@",error.localizedDescription);
}else{
context=[[NSManagedObjectContext alloc]init];
context.persistentStoreCoordinator=storeCoordinator;
NSLog(@"数据库打开成功!");
}
return context;
}
2.查询数据
对于有条件的查询,在Core Data中是通过谓词来实现的。首先创建一个请求,然后设置请求条件,最后调用上下文执行请求的方法。
-(void)addUserWithName:(NSString *)name screenName:(NSString *)screenName profileImageUrl:(NSString *)profileImageUrl mbtype:(NSString *)mbtype city:(NSString *)city{
//添加一个对象
User *us= [NSEntityDescription insertNewObjectForEntityForName:@"User" inManagedObjectContext:self.context];
us.name=name;
us.screenName=screenName;
us.profileImageUrl=profileImageUrl;
us.mbtype=mbtype;
us.city=city;
NSError *error;
//保存上下文
if (![self.context save:&error]) {
NSLog(@"添加过程中发生错误,错误信息:%@!",error.localizedDescription);
}
}










