您的位置:首页 > 移动开发 > IOS开发

iOS开发:coredata的简单使用

2016-04-12 16:42 495 查看
coredata
一、coredata简介
用来保存数据,是基于Sqlite的封装将数据保存到一个数据库文件。它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象。在此数据操作期间,我们不需要编写任何SQL语句.

二、创建coredata的流程

第一步:创建coredata的数据模型文件



创建完成之后会生成一个.xcdatamodeld文件



注:一个数据库对应一个上下文

打开文件添加表单文件



注:一个表单对应的是一个模型文件

若要做多表关联参照下列方法



第二步:创建实体对象文件

创建管理对象文件



选择数据模型文件



选择表单文件



创建完成后会生成以下文件,到此表单文件跟Employee就建立了对应关系。存储在数据库Employee表单的就是Employee对象。



第三步:代码关联

#pragma mark--创建上下文
-(void)setUpContext{

//1.创建管理对象-- nil代表关联所有的模型文件。

#if 1

NSManagedObjectModel * model = [NSManagedObjectModelmergedModelFromBundles:nil];

#else

NSURL * modelUrl = [[NSBundlemainBundle]URLForResource:namewithExtension:@"momd"];

NSManagedObjectModel * model = [[NSManagedObjectModelalloc]initWithContentsOfURL:
modelUrl];

#endif

//2.创建数据库文件--构造数据库存储路径

#if 1

NSString * doc =
NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)[0];
NSString * sqlitePath = [docstringByAppendingPathComponent:@"company.sqlite"];

#else
NSString * sqlitePath = [NSHomeDirectory()stringByAppendingPathComponent:@"Documents/company.sqlite"];

#endif
NSURL * url = [NSURLfileURLWithPath:sqlitePath];
NSError *error =nil;

//3.创建协调器--模型管理和数据库

NSPersistentStoreCoordinator * coordinator = [[NSPersistentStoreCoordinatoralloc]initWithManagedObjectModel:model];

//存储数据库的名字

[coordinatoraddPersistentStoreWithType:NSSQLiteStoreTypeconfiguration:nilURL:urloptions:nilerror:&error];

//4.创建上下文

NSManagedObjectContext * context = [[NSManagedObjectContextalloc]init];
self.context
= context;

self.context.persistentStoreCoordinator = coordinator;
}

#pragma mark—增
- (IBAction)addEmployee:(id)sender
{

//创建一个员工

Employee * emp1 = [NSEntityDescriptioninsertNewObjectForEntityForName:@"Employee"inManagedObjectContext:self.context];
emp1.name =@"wangwu";
emp1.age =@(16);
emp1.height =@(1.6);

//通过上下文更新数据库
NSError * error =nil;
[self.contextsave:&error];
}

#pragma mark—查
- (IBAction)readEmployee:(id)sender
{

//创建一个取得请求对象

NSFetchRequest * request = [NSFetchRequestfetchRequestWithEntityName:@"Employee"];

#if 0
//1.条件查找
request.predicate = [NSPredicate predicateWithFormat:@"name=%@ AND age=%@",@"zhangsan",@(17)];
request.predicate = [NSPredicate predicateWithFormat:@"name=%@ OR age>%@",@"zhangsan",@(17)];
request.predicate = [NSPredicate predicateWithFormat:@"name BEGINSWITH%@",@"zhang"];
request.predicate = [NSPredicate predicateWithFormat:@"name CONTAINS%@",@"ang"];
request.predicate = [NSPredicate predicateWithFormat:@"name like%@",@"*ang*"];

#elseif
//2.排序
NSSortDescriptor * sort = [NSSortDescriptor sortDescriptorWithKey:@"height"
ascending:YES];
request.sortDescriptors =@[sort];

#elseif

//3.分页查询--每页显示5条数据
request.fetchOffset =0;
request.fetchLimit =5;

#endif

//读取信息
NSError * error =nil;
NSArray * emps = [self.contextexecuteFetchRequest:requesterror:&error];
for (Employee
* empin emps) {

NSLog(@"age = %@,name = %@,height = %@",emp.age,emp.name,emp.height);
}

}

#pragma mark--删
-(void)deleteData{

//查找要删除的内容

NSFetchRequest * request = [NSFetchRequestfetchRequestWithEntityName:@"Employee"];

//查找条件
request.predicate = [NSPredicatepredicateWithFormat:@"name=%@",@"zhangsan"];

//读取出内容
NSArray * emps = [self.contextexecuteFetchRequest:requesterror:nil];

//删除内容
for (Employee
* empin emps) {
[self.contextdeleteObject:emp];
}

//同步数据库
[self.contextsave:nil];
}

#pragma mark--改
-(void)upDateData{

NSFetchRequest * request = [NSFetchRequestfetchRequestWithEntityName:@"Employee"];
request.predicate = [NSPredicatepredicateWithFormat:@"name=%@",@"zhangsan"];

NSError * error =nil;
NSArray * emps = [self.contextexecuteFetchRequest:requesterror:&error];

for (Employee
* empin emps) {

emp.height =@(200);

}

[self.contextsave:nil];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: