标签:
CoreData只是个框架,并不是数据库.
CoreData最大的优点就是可以将普通的数据当成“程序猿”们最喜欢的对象来操作,而不必去在意数据在磁盘上的存储方式,并且CoreData可以合理的管理内存,使用起来更加高效。
CoreData给我们提供了对象 — 关系映射功能,可以将对象模型转成关系模型,也就是把OC中的对象转化成数据库中的数据,同时也可以将数据库中的数据还原成OC中的对象。 CoreData将需要进行映射的对象称作实体(Entity),每个实体都可以拥有许多属性(Attributes),不同的实体之间还可以拥有一些关联关系(Relationships)。而这一切都建立在模型文件的基础上的。(在创建工程的时候勾选use coredata即可直接可视化添加实体,属性及关系).
在默认情况下,实体的数据类型都是NSManagedObject类型的,可以通过键值编码的方式存取数据。这样存取稍显麻烦,而且在项目中可能不满足于数据的存取,还会需要添加一些业务方法去处理其他的任务,这个时候就需要创建NSManagedObject的子类了。
勾选对应的entity文件就可以自动创建.
直接引入AppDelegate.h(之前勾选过use coredata,AppDelegate.h中会自动引入#import <CoreData/CoreData.h>),不需要我们自己再创建相对应的类.
接下来我们可以直接在工程中调用系统给我们创建好的coredata框架.代码如下:
1 #import "ViewController.h" 2 //第一步引入头文件AppDelegate.h 3 #import "AppDelegate.h" 4 //引入person.h 5 #import "Person.h" 6 //引入car 7 #import "Car.h" 8 @interface ViewController () 9 10 //第二步:声明属性[管理对象上下文]sqlite中是声明一个存储路径的属性 11 @property (nonatomic, strong)NSManagedObjectContext *managedObjectContext; 12 13 @end 14 15 @implementation ViewController 16 17 //懒加载 18 - (NSManagedObjectContext *)managedObjectContext { 19 //因为在Appdelegate中已经实现了.所以在这里是从appdelegate中去获取 20 21 if (_managedObjectContext == nil) { 22 // 获取appdelegate对象 23 AppDelegate *appdelegate = [UIApplication sharedApplication].delegate; //单例 24 _managedObjectContext = appdelegate.managedObjectContext; 25 } 26 return _managedObjectContext; 27 } 28 29 - (void)viewDidLoad { 30 [super viewDidLoad]; 31 // Do any additional setup after loading the view, typically from a nib. 32 33 //添加person 34 [self addPerson]; 35 36 //删除person 37 // [self deletePerson]; 38 39 // 更改person信息 40 [self updatePerson]; 41 42 //查询person信息 43 [self selectAllPerson]; 44 45 } 46 47 #pragma mark - 添加人 48 - (void)addPerson { 49 //添加的步骤 50 //1.创建person实体对象,然后告诉"Context",让他做好准备,将这个对象添加到数据库中 51 //实例对象有两种方式,初始化实体对象需要借用NSEntityDescription 52 //1.第一个参数:表名,第二个参数 53 // Person *per = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:self.managedObjectContext]; 54 55 //2.先创建一个实体 56 NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:self.managedObjectContext]; 57 //创建person对象 58 Person *per = [[Person alloc] initWithEntity:entityDescription insertIntoManagedObjectContext:self.managedObjectContext]; 59 //给对象属性赋值 60 per.name = @"MBBoy"; 61 per.gender = @"Unknow"; 62 per.age = @10; 63 64 //将车的对象通过实体描述类创建出来 //与左边文件的类名保持一致 65 Car *audiCar = [NSEntityDescription insertNewObjectForEntityForName:@"Car" inManagedObjectContext:self.managedObjectContext]; 66 audiCar.price = @300000; 67 audiCar.color = @"白色"; 68 audiCar.brand = @"奥迪A7"; 69 70 Car *benzCar = [NSEntityDescription insertNewObjectForEntityForName:@"Car" inManagedObjectContext:self.managedObjectContext]; 71 72 benzCar.price = @500000; 73 benzCar.color = @"红色"; 74 benzCar.brand = @"SUV"; 75 //将两辆车放在集合中存储然后进行赋值 76 NSSet *carSet = [NSSet setWithObjects:audiCar, benzCar, nil]; 77 per.personCar = carSet; 78 79 80 81 //将person对象存入数据库 82 BOOL result = [_managedObjectContext save:nil]; 83 //判断数据是否存储成功 84 if (result) { 85 NSLog(@"添加数据成功"); 86 } else { 87 NSLog(@"添加数据失败"); 88 } 89 } 90 91 #pragma mark - //删除person 92 - (void)deletePerson { 93 //实体化请求类[查询](先找到这个表) 94 NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"]; 95 //.根据条件删除内容(找条件)谓词 96 request.predicate = [NSPredicate predicateWithFormat:@"name = ‘MBBoy‘"]; 97 //由context根据删除条件的请求去具体进行删除操作 98 NSArray *resultArray = [self.managedObjectContext executeFetchRequest:request error:nil]; 99 //遍历搜索出来的结果 100 for (Person *per in resultArray) { 101 //删除查询到的相关的人的信息 102 [self.managedObjectContext deleteObject:per]; 103 104 } 105 //进行删除结果的判断 106 BOOL result = [_managedObjectContext save:nil]; 107 if (result) { 108 NSLog(@"删除成功"); 109 } else { 110 NSLog(@"删除失败"); 111 } 112 } 113 114 #pragma mark - 更改person信息 115 - (void)updatePerson { 116 // 1.实例化查询请求类 117 NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Person"]; 118 //设置谓词 119 fetchRequest.predicate = [NSPredicate predicateWithFormat:@"name = ‘MBBoy‘"]; 120 121 //由管理对象上下文‘context‘,按照查询条件进行相关的操作 122 NSArray *resultArray = [self.managedObjectContext executeFetchRequest:fetchRequest error:nil]; 123 //遍历结果更新相关的信息 124 for (Person *per in resultArray) { 125 //更改相关的信息 126 per.name = @"小强"; 127 per.gender = @"暖男"; 128 per.age = @38; 129 NSLog(@"%@, %@, %@", per.name, per.gender, per.age); 130 NSLog(@"%ld", resultArray.count); 131 } 132 133 //进行更新结果的接收 134 BOOL result = [_managedObjectContext save:nil]; 135 if (result) { 136 NSLog(@"更新成功"); 137 } else { 138 NSLog(@"更新失败"); 139 } 140 } 141 142 #pragma mark - 查询相关的信息 143 - (void)selectAllPerson { 144 //1.实例化查询请求 145 NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Person"]; 146 //设置查询条件 147 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name LIKE ‘*强‘"]; 148 fetchRequest.predicate = predicate; 149 //根据管理对象上下文执行相关的操作 150 NSArray *resultArray = [self.managedObjectContext executeFetchRequest:fetchRequest error:nil]; 151 //遍历数组查询结果 152 for (Person *per in resultArray) { 153 NSLog(@"++======++++%@, %@, %@", per.name, per.gender, per.age); 154 155 } 156 157 158 } 159 160 #pragma mark - 更新车的相关信息 161 - (void)updateCar { 162 //实例化查询请求 163 164 NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Car"]; 165 //设置查询条件 166 fetchRequest.predicate = [NSPredicate predicateWithFormat:@"brand CONTAINS ‘奥迪A7‘"]; 167 //管理对象上下文按照查询条件去查询 168 NSArray *resultArray = [_managedObjectContext executeFetchRequest:fetchRequest error:nil]; 169 for (Car *car in resultArray) { 170 NSLog(@"%@, %@, %@",car.price, car.color, car.brand); 171 car.brand = @"宝马X5"; 172 } 173 //保存结果 174 BOOL result = [_managedObjectContext save:nil]; 175 if (result) { 176 NSLog(@"更改成功"); 177 } else { 178 NSLog(@"更改失败"); 179 } 180 }
所有的增,删,改,查/都与上下文对象密切相关,可以说NSManagedObjectContext是我们的执行中介,一切活动都需要通过这个中介来执行.
标签:
原文地址:http://www.cnblogs.com/lovebugssun/p/5503253.html