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的封装.提供了更高级的持久化方式.在对数据库操作时, ...
随机推荐
- Logcat 不显示日志的另一个原因. 跟cocos2dx关系不大.
在Android真机调试时,如果在eclipse中看不到LogCat信息,提示是: $ adb logcat info: log device is empty! 原因是系统默认关闭了log,需要将其 ...
- AssetBundle系列——游戏资源打包(二)
本篇接着上一篇.上篇中说到的4步的代码分别如下所示: (1)将资源打包成assetbundle,并放到自定目录下 using UnityEditor; using UnityEngine; using ...
- Hadoop第5周练习—MapReduce计算气象温度等例子
:对云计算的看法 内容 :使用MapReduce求每年最低温度 内容 :求温度平均值能使用combiner吗? 内容 :使用Hadoop流求最高温度(awk脚本) 内容 :使用Hadoop流求最高温度 ...
- Bucky – 免费开源的实时用户监控工具
Bucky 是一个开源的实时用户监控工具,用于衡量用户在浏览器中使用 Web 应用程序时的性能.它可以自动测量你的网页需要多长时间来加载,Ajax 请求需要多长时间和各个函数需要实行多久. 您可能感兴 ...
- Python 的字符串格式化和颜色控制
(部分内容源自武神博客和网络收集.) Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两 ...
- IOS高级编程之一:多点触摸与手势验证
前段时间学习了IOS基础的一些控件的使用作为基础,现在开始学习一些高级编程的东西,手势处理器.文件I/O.定位.网络通信.多线程这些,分享一些学习的重点,还是很实用的. 今天就先介绍个简单点得,手势处 ...
- jquery选择器(原创)<三>
现在来看看表单域选择器 1.:input选择器 :input选择器,用于选择所有Input,textarea,select和button元素,语法格式如下: $(":input") ...
- 环信SDK与Apple Watch的结合(2)
这一篇主要是介绍怎么拖apple watch上的相关页面,附源码EMWatchOCDemo. 需要在工程中的“EMWatchOCDemo WatchKit App”中进行操作,该文件夹的结构如图 Wa ...
- jQuery的事件one
如果你只想你设计的对象只能让用户执行一次的话,可以使用jQuery的事件one()来实现. 演示一个,创建视图, 看看效果:
- 【C#进阶系列】10 属性
属性分为无参属性和有参属性(即索引器). 属性相对于字段的优点不仅仅是为了封装,还可以在读写的时候做一些额外操作,缓存某些值或者推迟创建一些内部对象,也适用于以线程安全的方式访问字段. 话说最基本的属 ...