CoreData的使用,整个的一篇完整版

//Student 类是NSManagedObject类

//  Person   是个表  是Core Data 里边的Data Model  。 如果已经创建过了,可以直接选NSManagedObject subclass

//  //

//

#import "ViewController.h"

#import "Student.h"

#define _Student_ty @"Student"

@interface ViewController ()<UITableViewDataSource,UITableViewDelegate>

{

NSMutableArray *_dataArr;

NSManagedObjectContext *_moc;

NSInteger _current;

}

@property (weak, nonatomic) IBOutlet UITextField *name;

@property (weak, nonatomic) IBOutlet UITextField *age;

@property (weak, nonatomic) IBOutlet UITableView *myTableView;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

_current=-1;

_dataArr=[[NSMutableArray alloc]init];

//找到coreData文件路径,注意后缀需要用momd

NSString *path=[[NSBundle mainBundle]pathForResource:@"Person" ofType:@"momd"];

//目标对象模型(被管理对象上下文)

NSManagedObjectModel *modle=[[NSManagedObjectModel alloc]initWithContentsOfURL:[NSURL fileURLWithPath:path]];

//需要绑定的数据库路径

NSString *sqlPath=[NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Person.sqlite"];

//关联起来------>>>>>>>持久化存储协调

NSPersistentStoreCoordinator *coordinator=[[NSPersistentStoreCoordinator alloc]initWithManagedObjectModel:modle];

NSError *error=nil;

//将Person的协调话和数据库关联起来

NSPersistentStore *store=[coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:sqlPath] options:nil error:&error];

if (!store) {

NSLog(@"store error  == %@",error);

}

//目标对象上下文,(用来管理对象)

_moc=[[NSManagedObjectContext alloc]init];

//将协调起设置给上下文(上下文就是数据的管理者)

_moc.persistentStoreCoordinator=coordinator;

/************************************************/

//创建一个查询请求

NSFetchRequest *request=[[NSFetchRequest alloc]initWithEntityName:_Student_ty];

//执行查询请求,执行的结果是所有的实体对象

NSArray *resualtArr=[_moc executeFetchRequest:request error:&error];

if (error) {

NSLog(@"fetch error  =  %@",error);

}else{

_dataArr.array=resualtArr;

}

}

- (IBAction)btnClick:(UIButton *)sender {

[self.view endEditing:YES];

NSError *error=nil;

switch (sender.tag) {

case 1:

{

//插入一个实体,返回值就是一个实体的对象指针。

Student *stu=[NSEntityDescription insertNewObjectForEntityForName:_Student_ty inManagedObjectContext:_moc];

stu.name=_name.text;

//双重转化   先转化成int    然后再转化NSNumber

stu.age=[NSNumber numberWithInt:_age.text.intValue];

//保存并判断是否成功(增删改的操作都需要保存)

[_moc save:&error];

if ([_moc save:&error]) {

//插入数据源后刷新

[_dataArr addObject:stu];

[_myTableView reloadData];

}else{

NSLog(@"inset===error===%@",error);

}

}

break;

case 2:

{

if (_current<0) {

return;

}else{

//要删除的对象

Student *stu2=[_dataArr objectAtIndex:_current];

//删除

[_moc deleteObject:stu2];

//保存并判断是否成功

if ([_moc save:&error]) {

[_dataArr removeObjectAtIndex:_current];

[_myTableView reloadData];

}else{

NSLog(@"delete  error  = %@",error);

}

}

}

break;

case 3:

{

if (_current<0) {

return;

}else{

Student *stu3=_dataArr[_current];

stu3.name=_name.text;

//双重转化  先转NSInteger   再转NSNumber

stu3.age=[NSNumber numberWithInteger:_age.text.integerValue];

if ([_moc save:&error]) {

[_myTableView reloadData];

}else{

NSLog(@"upData === error====%@",error);

}

}

}

break;

case 4:

{

NSFetchRequest *request=[[NSFetchRequest alloc]initWithEntityName:_Student_ty];

//请求条件

NSPredicate *predicate=[NSPredicate predicateWithFormat:@"name like %@",[NSString stringWithFormat:@"%@*",_name.text]];

//把请求条件附加给请求里边

request.predicate=predicate;

_dataArr.array=[_moc executeFetchRequest:request error:&error];

[_myTableView reloadData];

}

break;

default:

break;

}

_current=-1;

[email protected]"";

[email protected]"";

}

#pragma mark tableView

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{

return _dataArr.count;

}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

{

return 60;

}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:@"identifier"];

if (!cell) {

cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"identifier"];

}

Student *stu=_dataArr[indexPath.row];

cell.textLabel.text=stu.name;

cell.detailTextLabel.text=stu.age.stringValue;

return cell;

}

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

{

_current=indexPath.row;

}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

[self.view endEditing:YES];

}

-(void)scrollViewDidScroll:(UIScrollView *)scrollView

{//tableView发生滚动的时候收起键盘

[self.view endEditing:YES];

}

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

@end

时间: 2024-10-31 12:12:35

CoreData的使用,整个的一篇完整版的相关文章

Hadoop实战视频教程完整版 完整的Hadoop大数据视频教程

分享一套迪伦老师的完整的Hadoop实战视频教程,教程从学习Hadoop需要的数据库.Java和Linux基础讲起,非常适合零基础的学员,课程最后结合了实战项目演练,理论结合实战,深入浅出,绝对是当前最为完整.实战的Hadoop教程. <Hadoop大数据零基础高端实战培训系列配文本挖掘项目(七大亮点.十大目标)> 课程讲师:迪伦 课程分类:大数据 适合人群:初级 课时数量:230课时 用到技术:部署Hadoop集群 涉及项目:京东商城.百度.阿里巴巴 咨询QQ:1337192913(小公子)

信号处理必读的文章(-)—傅里叶分析之掐死教程(完整版)_转载至知乎

傅里叶分析之掐死教程(完整版)更新于2014.06.06 http://zhuanlan.zhihu.com/p/19763358 作 者:韩 昊 知 乎:Heinrich 微 博:@花生油工人 知乎专栏:与时间无关的故事 谨以此文献给大连海事大学的吴楠老师,柳晓鸣老师,王新年老师以及张晶泊老师. 转载的同学请保留上面这句话,谢谢.如果还能保留文章来源就更感激不尽了. ——更新于2014.6.6,想直接看更新的同学可以直接跳到第四章———— 我保证这篇文章和你以前看过的所有文章都不同,这是12年

CSS3弹性盒模型flexbox完整版教程

文章目录 基础知识 属性介绍 display: flex | inline-flex; (适用于父类容器元素上) 请注意: flex-direction (适用于父类容器的元素上) flex-wrap (适用于父类容器上) flex-flow (适用于父类容器上) justify-content (适用于父类容器上) align-items (适用于父类容器上) align-content (适用于父类容器上) order (适用于弹性盒模型容器子元素) flex-grow (适用于弹性盒模型容

【甘道夫】Hadoop2.2.0 NN HA详细配置+Client透明性试验【完整版】

引言: 前面转载过一篇团队兄弟[伊利丹]写的NN HA实验记录,我也基于他的环境实验了NN HA对于Client的透明性. 本篇文章记录的是亲自配置NN HA的详细全过程,以及全面测试HA对客户端访问透明性的全过程,希望对大家有帮助. 实验环境: Hadoop2.2.0的4节点集群,ZK节点3个(ZK节点数最好为奇数个),hosts文件和各节点角色分配如下: hosts: 192.168.66.91 master 192.168.66.92 slave1 192.168.66.93 slave2

office2013官方下载免费完整版

本文提供了微软最新office2013官方下载 免费完整版(专业增强版),本Office 2013完美激活版包含了Word 2013官方下载.PowerPoint 2013官方下载.Excel 2013官方下载.OneNote.OutLook 等组件,再按照流程操作即可实现简单的Office2013完美激活.用户可根据自身的实际需要而有选择性的安装其中的一个或者多个组件. Office 2013软件的版本有零售版和批量授权版之分,很多朋友安装了Office的零售版,却要用“KMS或MAK”激活,

《经济学原理:微观经济学分册》学习手册 第7版_P359_2015.09_完整版PDF电子书下载 带索引书签目录高清版

<经济学原理:微观经济学分册>学习手册  第7版_P359_2015.09_完整版PDF电子书下载 带索引书签目录高清版_13869902 下载地址    http://pan.baidu.com/s/1jHVHEM6 [作 者]付达院主编 [形态项] 359 [出版项] 北京:北京大学出版社 , 2015.09 [ISBN号]978-7-301-26244-3 [中图法分类号]F016 [原书定价]42.00 [主题词]微观经济学-高等学校-自学参考资料 [参考文献格式] 付达院主编. &l

CAD CAM CAE自学手册 ANSYS 15.0有限元分析自学手册_完整版PDF电子书下载

CAD CAM CAE自学手册  ANSYS 15.0有限元分析自学手册_2015.10_P523_完整版PDF电子书下载 带索引书签目录高清版_13818745 下载链接http://pan.baidu.com/s/1kUH24Rl [作 者]李津编著 [丛书名]CAD/CAM/CAE自学手册 [形态项] 523 [出版项] 北京:人民邮电出版社 , 2015.10 [ISBN号]978-7-115-27588-2 [中图法分类号]O241.82-39 [原书定价]69.00 [主题词]有限元

Android照片墙完整版,完美结合LruCache和DiskLruCache

转载地址:http://blog.csdn.net/guolin_blog/article/details/34093441#comments 在上一篇文章当中,我们学习了DiskLruCache的概念和基本用法,但仅仅是掌握理论知识显然是不够的,那么本篇文章我们就来继续进阶一下,看一看在实战当中应该怎样合理使用DiskLruCache.还不熟悉DiskLruCache用法的朋友可以先去参考我的上一篇文章 Android DiskLruCache完全解析,硬盘缓存的最佳方案 . 其实,在真正的项

机房收费系统之下机完整版

前篇博客只是简单的说了下,机房收费系统下机的简单思路,下面来正式的介绍下整个流程. 分析 由于下机的时候需要涉及到两个表中的数值--StudentInfo表和OnlineInfo表,那么我们的思路就是如何能够简化查 询的操作. 学生表中包含的学生的静态信息,而上机信息表中则包含了有关学生上机的所有的信息. 流程 1.更新学生下机信息 2.触发器触发后,会自动的更新学生的消费时间,消费金额并更新学生余额 3.两张表联合查询有关界面上的所有信息 4.为所有的文本框赋值 注意:其实最有意思的就是触发器