Core Data的简单用法
#import "ViewController.h" // 第一步:引入头文件AppDelegate
#import "AppDelegate.h"
#import "Person.h"
#import "Car.h" @interface ViewController () // 第二步:声明属性[管理对象上下文](SQLite中是声明一个存储路径的属性)
@property (nonatomic, strong) NSManagedObjectContext *managedObjectContext; @end @implementation ViewController // 懒加载
- (NSManagedObjectContext *)managedObjectContext { // 因为在AppDelegate中已经实现过了,所以在这里是从AppDelegate中去获取
if (!_managedObjectContext) {
// 获取appDelegate对象
AppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
_managedObjectContext = appDelegate.managedObjectContext;
}
return _managedObjectContext;
} - (void)viewDidLoad {
[super viewDidLoad]; // 添加Person
[self addPerson]; // 删除Personf
// [self deletePerson]; // 更改person信息
// [self updatePerson]; // 查询所有人
[self searchAllPerson]; // 更改car的信息
[self updateCar]; } #pragma mark - 添加person
- (void)addPerson { // 添加的步骤
// 1.创建person实体对象,然后告诉context,让他做好准备,将这个对象添加到数据库中
// 实例对象有两种方式,(初始化实体对象需要借助NSEntityDescription)
// 第一种:(简单,用的多)
Person *per = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:self.managedObjectContext]; // 第二种:(不常用)
// 创建一个entity的实体
// NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:self.managedObjectContext];
// // 创建person对象
// Person *per = [[Person alloc] initWithEntity:entityDescription insertIntoManagedObjectContext:self.managedObjectContext]; // 2.给对象属性赋值
per.personName = @"卫庄";
per.personGender = @"男";
per.personAge = @; /**
* 将车的对象通过实体描述类创建出来
*/
Car *audiCar = [NSEntityDescription insertNewObjectForEntityForName:@"Car" inManagedObjectContext:self.managedObjectContext]; audiCar.price = @;
audiCar.color = @"白色";
audiCar.brand = @"奥迪A7"; Car *benchiCar = [NSEntityDescription insertNewObjectForEntityForName:@"Car" inManagedObjectContext:self.managedObjectContext]; benchiCar.price = @;
benchiCar.color = @"红色";
benchiCar.brand = @"奔驰SUV"; // 将两辆车放到集合中存储并进行赋值
NSSet *carSet = [NSSet setWithObjects:audiCar, benchiCar, nil];
per.personCar = carSet; // 3.将person对象存入数据库
BOOL result = [_managedObjectContext save:nil]; // 4.判断是否插入成功
if (result) {
NSLog(@"添加数据成功");
} else {
NSLog(@"添加数据失败");
} } #pragma mark - 删除person
- (void)deletePerson { // 1.实体化请求类【查询】
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"]; // 2.找到删除的条件(即根据什么去删除)(NSPredicate)
request.predicate = [NSPredicate predicateWithFormat:@"personName = '卫庄'"]; // 3.由context根据删除条件的请求去具体进行删除操作
NSArray *resultArray = [self.managedObjectContext executeFetchRequest:request error:nil]; // 4.遍历搜索出来的结果
for (Person *per in resultArray) { // 删除查询的相关的人的信息
[self.managedObjectContext deleteObject:per]; } // 5.进行删除结果的判断
BOOL result = [self.managedObjectContext save:nil]; // 6.判断结果
if (result) {
NSLog(@"删除成功");
} else {
NSLog(@"删除失败");
} } #pragma mark - 更改person信息
- (void)updatePerson { // 1.实例化查询请求类
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Person"]; // 2.设置查询条件
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"personName = '卫庄'"]; // 3.由管理对象上下文“context”,按照查询条件进行相关的操作
NSArray *resultArray = [self.managedObjectContext executeFetchRequest:fetchRequest error:nil]; // 4.遍历结果更新数据
for (Person *per in resultArray) { // 更改相关的信息
per.personName = @"高月";
per.personGender = @"女";
per.personAge = @; NSLog(@"name = %@, gender = %@, age = %@", per.personName, per.personGender, per.personAge);
} // 5.进行更新结果的判断
BOOL result = [self.managedObjectContext save:nil]; // 6.判断是否更新成功
if (result) {
NSLog(@"更新成功");
} else {
NSLog(@"更新失败");
} } #pragma mark - 查询所有人
- (void)searchAllPerson { // 1.实例化查询请求
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"]; // 2.设置查询条件
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"personName LIKE '*月'"];
request.predicate = predicate; // 3.根据管理对象上下文“context”执行相关的操作
NSArray *resultArray = [self.managedObjectContext executeFetchRequest:request error:nil]; // 4.遍历查询结果
for (Person *per in resultArray) { NSLog(@"name = %@, gender = %@, age = %@", per.personName, per.personGender, per.personAge);
} // 5.进行查询结果的判断
BOOL result = [self.managedObjectContext save:nil]; // 6.判断是否查询成功
if (result) {
NSLog(@"查询成功");
} else {
NSLog(@"查询失败");
}
} #pragma mark - 更新车的相关信息
- (void)updateCar { // 1.实例化查询请求
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Car"]; // 2.设置查询条件
request.predicate = [NSPredicate predicateWithFormat:@"brand CONTANS '奥迪A7'"]; // 3.管理对象上下文按照查询条件去查询
NSArray *resultArray = [self.managedObjectContext executeFetchRequest:request error:nil]; // 4.遍历查询结果
for (Car *car in resultArray) { NSLog(@"price = %@, brand = %@, color = %@", car.price, car.brand, car.color);
car.brand = @"宝马X5"; } // 5.保存结果进行结果判断
if ([self.managedObjectContext save:nil]) {
NSLog(@"更新成功");
} else {
NSLog(@"更新失败");
} } @end
Core Data的简单用法的更多相关文章
- Core Data 的简单使用
认识cocoa Data在ios开发中的环境情况. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/f ...
- Core Data 学习简单整理01
Core Data是苹果针对Mac和iOS平台开发的一个框架, 通过CoreData可以在本地生成数据库sqlite,提供了ORM的功能,将对象和数据模型相互转换 . 通过Core Data管理和操作 ...
- iphone数据存储之-- Core Data的使用(一)
http://www.cnblogs.com/xiaodao/archive/2012/10/08/2715477.html 一.概念 1.Core Data 是数据持久化存储的最佳方式 2.数据最终 ...
- (转)iphone数据存储之-- Core Data的使用
原文:http://www.cnblogs.com/xiaodao/archive/2012/10/08/2715477.html iphone数据存储之-- Core Data的使用(一) 一. ...
- Core Data (2)-备用
1.Core Data 是数据持久化存储的最佳方式 2.数据最终的存储类型可以是:SQLite数据库,XML,二进制,内存里,或自定义数据类型 在Mac OS X 10.5Leopard及以后的版本中 ...
- IOS 数据存储之 Core Data详解
Core Date是ios3.0后引入的数据持久化解决方案,它是是苹果官方推荐使用的,不需要借助第三方框架.Core Date实际上是对SQLite的封装,提供了更高级的持久化方式.在对数据库操作时, ...
- 数据存储-- Core Data的使用(一)
一.概念 1.Core Data 是数据持久化存储的最佳方式 2.数据最终的存储类型可以是:SQLite数据库,XML,二进制,内存里,或自定义数据类型 在Mac OS X 10.5Leopard及以 ...
- iphone数据存储之-- Core Data的使用
一.概念 1.Core Data 是数据持久化存储的最佳方式 2.数据最终的存储类型可以是:SQLite数据库,XML,二进制,内存里,或自定义数据类型 在Mac OS X 10.5Leopard及以 ...
- IOS 数据存储之 Core Data具体解释
Core Date是ios3.0后引入的数据持久化解决方式,它是是苹果官方推荐使用的.不须要借助第三方框架.Core Date实际上是对SQLite的封装.提供了更高级的持久化方式.在对数据库操作时, ...
随机推荐
- codeforces B. Design Tutorial: Learn from Life
题意:有一个电梯,每一个人都想乘电梯到达自己想要到达的楼层!从a层到b层的时间是|a-b|, 乘客上下电梯的时间忽略不计!问最少需要多少的时间.... 这是一道神题啊,自己的思路不知不觉的就按 ...
- 红黑树(二)之 C语言的实现
概要 红黑树在日常的使用中比较常用,例如Java的TreeMap和TreeSet,C++的STL,以及Linux内核中都有用到.之前写过一篇文章专门介绍红黑树的理论知识,本文将给出红黑数的C语言的实现 ...
- iOS-Debug调试
转载:http://www.cnblogs.com/Leo_wl/p/4423922.html
- Hadoop下面WordCount运行详解
单词计数是最简单也是最能体现MapReduce思想的程序之一,可以称为MapReduce版"Hello World",该程序的完整代码可以在Hadoop安装包的"src/ ...
- Direct3D11学习:(七)绘图基础——彩色立方体的绘制
转载请注明出处:http://www.cnblogs.com/Ray1024 一.概述 在前面的几篇文章中,我们详细介绍了Direct3D渲染所需要的数学基础和渲染管道理论知识.从这篇文章开始,我们就 ...
- JAVA生成随机数种子的方法
Java里面有一个随机函数——Random,刚开始只是知道这个函数具有随机取值的作用,于是上网搜索了资料一番,做了一下一些关于Random函数的总结: Java中存在着两种Random函数: 一. ...
- SQL Server临界点游戏——为什么非聚集索引被忽略!
当我们进行SQL Server问题处理的时候,有时候会发现一个很有意思的现象:SQL Server完全忽略现有定义好的非聚集索引,直接使用表扫描来获取数据.我们来看看下面的表和索引定义: CREATE ...
- 前端引擎初步设计稿 -通过配置生成动态页面 ,LandaSugar平台 .NET-C#-MVC
公司准备开发出一款项目开发平台 LandaSugar,分为 前端引擎.工作引擎.数据引擎 三大块,开发人员只需要对三大模块进行相应的配置便能够完成一个定制项目的开发. 听起来貌似是异想天开,但是是否真 ...
- 如何彻底的卸载和删除Windows service
最近遇到很头疼的问题,安装到服务器的Windows Service卸载的时候出错了,结果在服务列表中就一直驻留,并且系统进程一直在运行,怎么都杀不掉. 最后终于找到办法了: 1.常规做法,批处理命令卸 ...
- 重构第8天:使用委托代替继承(Replace Inheritance with Delegation)
理解:根本没有父子关系的类中使用继承是不合理的,可以用委派的方式来代替. 详解:我们经常在错误的场景使用继承.继承应该在仅仅有逻辑关系的环境中使用,而很多情况下却被使用在达到方便为目的的环境中. 看下 ...