iOS-数据存储方式四之Core Data
来源:互联网 发布:网络文化市场 编辑:程序博客网 时间:2024/06/01 10:42
Core Data框架提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite3数据库文件中,也能够将保存在数据库中的数据还原成OC对象。在此数据操作期间,不需要编写任何SQL语句。使用此功能,要添加CoreData.framework和导入主头文件<CoreData/CoreData.h>◦ 优点:能够合理管理内存,避免使用sql的麻烦,高效◦ 缺点:它使基于SQLite的,所以并没有SQLite高效
我们创建项目的时候,最好不好勾选Core data那个选项,因为我可能需要用到多个数据库,按照自己的需求来创建比较方便。
开发步骤总结:
1.初始化NSManagedObjectModel对象,加载模型文件,读取app中的所有实体信息
2.初始化NSPersistentStoreCoordinator对象,添加持久化库(这里采取SQLite数据库)
3.初始化NSManagedObjectContext对象,拿到这个上下文对象操作实体,进行CRUD操作
//// ViewController.m// CoreData//// Created by HZhenF on 2017/5/31.// Copyright © 2017年 Huangzhengfeng. All rights reserved.//#import "ViewController.h"#import <CoreData/CoreData.h>#import "Person.h"@interface ViewController ()@property(nonatomic,strong) NSManagedObjectContext *context;@property(nonatomic,strong) UIButton *btn1;@property(nonatomic,strong) UIButton *btn2;@property(nonatomic,strong) UIButton *btn3;@property(nonatomic,strong) UIButton *btn4;@property(nonatomic,strong) UIButton *btn5;@end@implementation ViewController-(UIButton *)btn1{ if (!_btn1) { _btn1 = [[UIButton alloc] initWithFrame:CGRectMake(0, 100, 100, 100)]; _btn1.backgroundColor = [UIColor grayColor]; _btn1.titleLabel.font = [UIFont systemFontOfSize:12.0]; [_btn1 setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [_btn1 addTarget:self action:@selector(createDBContext) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:_btn1]; } return _btn1;}-(UIButton *)btn2{ if (!_btn2) { _btn2 = [[UIButton alloc] initWithFrame:CGRectMake(250, 100, 100, 100)]; _btn2.titleLabel.font = [UIFont systemFontOfSize:12.0]; _btn2.backgroundColor = [UIColor cyanColor]; [_btn2 setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [_btn2 addTarget:self action:@selector(onClickSearchAction) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:_btn2]; } return _btn2;}-(UIButton *)btn3{ if (!_btn3) { _btn3 = [[UIButton alloc] initWithFrame:CGRectMake(0, CGRectGetMaxY(self.btn1.frame) + 100, 100, 100)]; _btn3.titleLabel.font = [UIFont systemFontOfSize:12.0]; _btn3.backgroundColor = [UIColor yellowColor]; [_btn3 setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [_btn3 addTarget:self action:@selector(insertMessage) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:_btn3]; } return _btn3;}-(UIButton *)btn4{ if (!_btn4) { _btn4 = [[UIButton alloc] initWithFrame:CGRectMake(CGRectGetMinX(self.btn2.frame), CGRectGetMaxY(self.btn2.frame) + 100, 100, 100)]; _btn4.titleLabel.font = [UIFont systemFontOfSize:12.0]; _btn4.backgroundColor = [UIColor orangeColor]; [_btn4 setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [_btn4 addTarget:self action:@selector(onClickDeleteAction) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:_btn4]; } return _btn4;}-(UIButton *)btn5{ if (!_btn5) { _btn5 = [[UIButton alloc] initWithFrame:CGRectMake(CGRectGetMaxX(self.btn3.frame) + 25, CGRectGetMaxY(self.btn3.frame) + 20, 100, 100)]; _btn5.titleLabel.font = [UIFont systemFontOfSize:12.0]; _btn5.backgroundColor = [UIColor greenColor]; [_btn5 setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [_btn5 addTarget:self action:@selector(onClickModifyAction) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:_btn5]; } return _btn5;}- (void)viewDidLoad { [super viewDidLoad]; [self.btn1 setTitle:@"创建数据库上下文" forState:UIControlStateNormal]; [self.btn2 setTitle:@"查询数据" forState:UIControlStateNormal]; [self.btn3 setTitle:@"插入数据" forState:UIControlStateNormal]; [self.btn4 setTitle:@"删除数据" forState:UIControlStateNormal]; [self.btn5 setTitle:@"修改数据" forState:UIControlStateNormal];// NSLog(@"%@",NSHomeDirectory());}-(NSManagedObjectContext *)createDBContext{ //1.创建模型对象 NSURL *modelUrl = [[NSBundle mainBundle] URLForResource:@"MyCoreData" withExtension:@"momd"]; //根据模型文件创建模型对象 NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelUrl]; //打开模型文件,参数为nil则打开包中所有模型文件合并成一个 // NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil]; //2.创建持久化助理 //利用模型对象创建助理对象 NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model]; //数据库的名称和路径 NSString *docStr = @"/Users/huangzhenfeng/Desktop"; NSString *sqlPath = [docStr stringByAppendingPathComponent:@"mySqlite1.sqlite"]; NSLog(@"sqlPath = %@",sqlPath); NSURL *sqlUrl = [NSURL fileURLWithPath:sqlPath]; //设置数据库相关信息 [store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:sqlUrl options:nil error:nil]; NSError *error; NSManagedObjectContext *context = nil; if (!error) { //3.创关键上下文 context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]; //关联持久化助理 [context setPersistentStoreCoordinator:store]; NSLog(@"数据库打开成功!"); } else { NSLog(@"数据库打开失败!错误:%@",error.localizedDescription); } self.context = context; return context;}//插入数据-(void)insertMessage{ //创建一个对象 Person *person = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:self.context]; person.name = @"HZhenF"; person.age = 21; //保存信息 NSError *error = nil; if ([self.context save:&error]) { NSLog(@"插入数据成功"); } else { NSLog(@"添加过程发生错误,错误信息:%@",error.localizedDescription); }}-(void)onClickSearchAction{// NSArray *arr = [self searchMessage:@"HZhenF"]; NSArray *arr = [self searchMessage:@"F"]; for (Person *p in arr) { NSLog(@"name = %@----age = %d",p.name,p.age); }}//查询数据-(NSArray *)searchMessage:(NSString *)name{ //创建查询请求 NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"]; //创建谓词,设置获取数据的条件// request.predicate = [NSPredicate predicateWithFormat:@"name = %@",name]; request.predicate = [NSPredicate predicateWithFormat:@"name CONTAINS %@",name]; //执行对象管理上下文的查询方法 NSArray *array = [self.context executeFetchRequest:request error:nil]; return array;}-(void)onClickDeleteAction{// NSArray *arr = [self searchMessage:@"HZhenF"]; NSArray *arr = [self searchMessage:@"Feng"]; for (Person *p in arr) { if (p.age == 21 || p.age == 10) { [self removeMesage:p]; } }}//删除数据-(void)removeMesage:(Person *)person{ [self.context deleteObject:person]; NSError *error; if ([self.context save:&error]) { NSLog(@"删除成功!"); } else { NSLog(@"删除过程发成错误,错误信息:%@",error.localizedDescription); }}-(void)onClickModifyAction{ NSArray *arr = [self searchMessage:@"HZhenF"]; for (Person *p in arr) { if ([p.name isEqualToString: @"HZhenF"]) { [self modifyMessage:p]; } }}//修改数据-(void)modifyMessage:(Person *)person{ person.name = @"Feng"; person.age = 10; NSError *error; if ([self.context save:&error]) { NSLog(@"修改成功"); } else { NSLog(@"修改过程发生错误,错误信息:%@",error.localizedDescription); }}@end
//// Person.h// CoreData//// Created by HZhenF on 2017/5/31.// Copyright © 2017年 Huangzhengfeng. All rights reserved.//#import <CoreData/CoreData.h>@interface Person : NSManagedObject@property(nonatomic,retain) NSString *name;@property(nonatomic,assign) int16_t age;@end
//// Person.m// CoreData//// Created by HZhenF on 2017/5/31.// Copyright © 2017年 Huangzhengfeng. All rights reserved.//#import "Person.h"@implementation Person@dynamic name;@dynamic age;@end
阅读全文
0 0
- iOS-数据存储方式四之Core Data
- IOS数据存储之---Core Data
- IOS 数据存储之 Core Data详解
- iOS开发之Core Data数据存储
- IOS 数据存储之 Core Data详解
- IOS 数据存储之 Core Data详解
- iOS 数据存储 - Core Data
- iOS数据存储--Core Data
- iOS应用数据存取之数据库存储-----Core Data
- [ios开发基础之 Core Data [1] ]Core Data数据持久性存储基础教程
- iOS 之Core Data持久化存储
- IOS数据持久化之Core Data
- IOS数据持久化之Core Data(四) - 多表查询
- iphone数据存储之-- Core Data的使用(一)iOS
- iOS应用开发之Core Data数据持久化存储笔记
- iOS教程:Core Data数据持久性存储基础教程
- iOS教程:Core Data数据持久性存储基础教程
- iOS教程:Core Data数据持久性存储基础教程
- angularjs中关于ng-show和ng-switch
- 程序猿的屌丝经历(三)
- 开心
- ★★★★★c++虚函数实现机制及内存模型
- Problem B: 大学的组织架构
- iOS-数据存储方式四之Core Data
- Java hashcode方法编写技巧 —— 记住这3条约定
- web前端之廖雪峰js学习记录
- Kotlin编程之扩展方法
- 【asp.net】邮件发送
- poj 1635 Subway tree systems (树同构)
- Sicily 1211. 商人的宣传
- 使用Redis做缓存——个人笔记
- Maven——maven工程找不到maven库