ios深度解析之coreData
2015-10-09 19:05
525 查看
coreData数据持久化 是对SQLite的升级优化, 这里有几个非常重要的类:
1.NSManagerObjectModel(被管理对象的模型, 实体)
2.NSEntityDescription (创建实体描述, 实体名必须跟类名相同)
3,NSFetchRequest (从实体中查询)
4.NSManagedObjectContext(被管理对象上下文, 临时数据库(添加, 查询,修改,删除数据))
5.NSPrisistenStoreCoordinator(持久化存储助理 , 数据库的连接器)
6.创建表步骤:
(1) ctrl + n新建(2)选中所建项目
(3)选中项目 添加数据
(4)在工程里自动会生成.h和.m文件
7.环境搭建上下文
#pragma mark - 添加数据- (IBAction)tianjia:(UIButton *)sender {
// 创建实体描述
NSEntityDescription *studentED = [NSEntityDescription entityForName:@"Student" inManagedObjectContext:self.managerContext];
for (int i = 0; i < 10; i++) {
// 根据实体描述创建对象
Student *student = [[Student alloc] initWithEntity:studentED insertIntoManagedObjectContext:self.managerContext];
// 给实体赋值
student.name = [NSString stringWithFormat:@"毛毛%d号", i];
student.age = [NSNumber numberWithInt: 18 + i*5];
student.sex = [NSString stringWithFormat:@"女"];
}
// 数据同步
NSError *error = nil;
[self.managerContext save:&error];
if (!error) {
NSLog(@"存储成功");
}
}
#pragma mark - 查询数据
- (IBAction)chaXun:(UIButton *)sender {
// 从实体中查询
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Student"];
// 创建实体描述
NSEntityDescription *studetED = [NSEntityDescription entityForName:@"Student" inManagedObjectContext:self.managerContext];
// 设置查询实体
request.entity = studetED;
// 设置排序 yes升序 no降序
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"age" ascending:YES];
request.sortDescriptors = @[sort];
//根据条件查询
// NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@", @"毛毛7号"];
// 模糊查询 包含
// NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name CONTAINS%@", @"7"];
// NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name LIKE %@", @"毛毛*号"];
// request.predicate = predicate;
// 数组接收查询数据
NSArray *array = [self.managerContext executeFetchRequest:request error:nil];
// 遍历数组 取出数据打印
for (Student *student in array) {
NSLog(@"姓名:%@, 年纪:%@, 性别:%@", student.name, student.age, student.sex);
}
}
#pragma mark - 修改数据
- (IBAction)xiuGai:(UIButton *)sender {
// 从实体中修改
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Student"];
// 创建实体描述
NSEntityDescription *StudentED = [NSEntityDescription entityForName:@"Student" inManagedObjectContext:self.managerContext];
// 设置修改的实体
request.entity = StudentED;
// 根据条件修改
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@", @"毛毛1号"];
request.predicate = predicate;
// 数据接收修改数据
NSArray *array = [self.managerContext executeFetchRequest:request error:nil];
if (array.count > 0) {
Student *student = array.lastObject;
student.name = @"军军";
student.age = @1;
student.sex = @"男";
// 同步数据
if ([self.managerContext save:nil]) {
NSLog(@"修改成功");
} else {
NSLog(@"修改失败");
}
} else {
NSLog(@"没有对应的实体");
}
}
#pragma mark - 删除数据
- (IBAction)shanChu:(UIButton *)sender {
// 从实体中删除
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Student"];
// 创建实体描述
NSEntityDescription *StudentED = [NSEntityDescription entityForName:@"Student" inManagedObjectContext:self.managerContext];
// 设置删除的实体
request.entity = StudentED;
// 根据条件删除
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"sex = %@", @"女"];
request.predicate = predicate;
// 数据接收删除数据
NSArray *array = [self.managerContext executeFetchRequest:request error:nil];
if (array.count > 0) {
// 遍历数组
for (Student *stu in array) {
// 删除数据
[self.managerContext deleteObject:stu];
// 同步数据
if ([self.managerContext save:nil]) {
NSLog(@"删除成功");
} else {
NSLog(@"删除失败");
}
}
}else {
NSLog(@"没事这个实体");
}
}
#pragma mark - 被管理对象上下的懒加载方法
- (NSManagedObjectContext *)managerContext
{
if (! _managerContext) {
// 获取apdelegate当中的被管理对象上下文
_managerContext = ((AppDelegate *)[UIApplication sharedApplication].delegate).managedObjectContext;
}
return _managerContext;
}
相关文章推荐
- IOS开发:动画1
- 我的IOS学习历程-第二天
- IOS开发:动画2 AlayerAnimation
- iOS地图系统导航
- IOS Xib使用——Xib表示局部界面
- iOS图片拉伸技巧
- iOS开发--应用国际化,应用内切换语言
- CAShapeLayer绘画圆环,圆环进度条
- 苹果开发者账号注册、申请续费整个流程
- H5和HTML5的区别,WEB APP未来会不会替代安卓和IOS开发人员吗?
- iOS开发 正确选择图片加载方式
- iOS block种类和切换
- iOS项目在非测试设备上的安装方法(项目上线前)持续更。。。
- iOS开发Icon图标设置 (转)
- iOS 弱引用
- 解决适配iOS9
- iOS 相机和相册使用授权
- 解决Xcode升级7.0后,部分.a静态库在iOS9.0的模拟器上,link失败的问题
- Photoshop脚本代码一键生成所有IOS图标
- 全面了解 iOS 静态库开发