CoreData的一些简单运用
1.首先创建一个新的工程
记得勾选下面的 Use Core Data
万恶分割线————————————————————————
然后点击Add Entity 创建一个类似于表名。
万恶分割线————————————————————————
然后创建属性名 , 选择属性的类型
万恶分割线————————————————————————
然后你写好属性之后,就可以让系统帮你生成类了,点击倒数第三个(Create NSManagedObject Subclass...)
万恶分割线————————————————————————
记得,你要用就要勾选它,然后点击下一步。
万恶分割线————————————————————————
然后系统就帮你生成了类。
然后这个时候你可以进到AppDElegate.h
#import <UIKit/UIKit.h>
#import <CoreData/CoreData.h> @interface AppDelegate : UIResponder <UIApplicationDelegate> @property (strong, nonatomic) UIWindow *window;
//被管理对象上下文(数据管理器)相当于一个临时数据库
@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
//被管理对象模型(数据模型器)
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
//持久化存储助理(数据连接器)整个CoreData框架中的核心
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;
//把骂我呢临时数据库中进行的改变进行永久保存
- (void)saveContext;
//获取真实文件的存储路径,NURL类型
- (NSURL *)applicationDocumentsDirectory;
在你ViewController.m文件里面就可以实现数据库的增删改, 注意!!!!! 我的tableview,是拖拽控件的,但是里面的方法几乎都可以借鉴。
#import "AppDelegate.h"
#import "Clothes.h"
@interface ViewController ()<UITableViewDelegate,UITableViewDataSource>
@property (weak, nonatomic) IBOutlet UITableView *TableVire;
@property(strong,nonatomic)NSMutableArray *dataSource; //声明一个AppDelegate对象属性,用来调用类中的属性,比如被管理对象上下文
@property(strong,nonatomic)AppDelegate *myAppDelegate; @end @implementation ViewController
/**
* 插入数据
*
* @param sender +barButtonItem
*/
- (IBAction)addModel:(id)sender
{
//插入数据
//创建实体描述对象
NSEntityDescription *description=[NSEntityDescription entityForName:@"Clothes" inManagedObjectContext:self.myAppDelegate.managedObjectContext]; //1.创建一个模型对象
Clothes *cloth=[[Clothes alloc] initWithEntity:description insertIntoManagedObjectContext:self.myAppDelegate.managedObjectContext];
cloth.name=@"Puma";
int price=arc4random()%1000+1;
cloth.price=[NSNumber numberWithInt:price];
//插入数据源数组
[self.dataSource addObject:cloth];
//插入UI
[self.TableVire insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:self.dataSource.count-1 inSection: 0]] withRowAnimation:UITableViewRowAnimationLeft];
//对数据管理器中的更改进行永久存储
[self.myAppDelegate saveContext];
} - (void)viewDidLoad {
[super viewDidLoad];
//初始化数组
self.dataSource=[NSMutableArray array];
self.myAppDelegate=[UIApplication sharedApplication].delegate;
//查询数据
//1.NSFetchRequest对象
NSFetchRequest *request=[[NSFetchRequest alloc] initWithEntityName:@"Clothes"];
//2.设置排序
//2.1设置排序描述对象
NSSortDescriptor *sortDescriptor=[[NSSortDescriptor alloc] initWithKey:@"price" ascending:YES];
request.sortDescriptors=@[sortDescriptor];
//执行这个查询请求
NSError *error=nil;
NSArray *resut= [self.myAppDelegate.managedObjectContext executeFetchRequest:request error:&error];
//给数据源组中添加数据
[self.dataSource addObjectsFromArray:resut]; }
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.dataSource.count;
}
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
Clothes *cloth=self.dataSource[indexPath.row];
cell.textLabel.text=[NSString stringWithFormat:@"%@---%@",cloth.name,cloth.price]; return cell;
}
//允许tableview编辑
-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
//tableView编辑的方法
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle==UITableViewCellEditingStyleDelete) {
// 删除数据源
Clothes *cloth=self.dataSource[indexPath.row];
[self.dataSource removeObject:cloth];
//删除数据管理器中的数据
[self.myAppDelegate.managedObjectContext deleteObject:cloth];
//将进行的更改进行永久保存
[self.myAppDelegate saveContext];
//删除单元格
[self.TableVire deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; }
}
//点击cell进行修改数据
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//1.找到模型对象
Clothes *cloth=self.dataSource[indexPath.row];
cloth.name=@"Nike";
// 舒心单元格
[self.TableVire reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
//通过saveContext对数据惊醒永久保存
[self.myAppDelegate saveContext]; } - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} @end
这样你就对tableview进行增删改,查看, 并且数据会永久存储在你的本地数据库 , 当然这个是很基本,很简单的。
CoreData的一些简单运用的更多相关文章
- Coredata 单表简单使用
** 使用Coredata 工程中的DataModel创建:系统创建.手动创建** ** 使用Coredata需要要导入<CoreData/CoreData.h> ** 1.系统创建(系统 ...
- CoreData数据库浅析
Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象.在此数 ...
- 数据处理之CoreData
一.CoreData数据库框架与Sqlite对比 Sqlite: 1.基于C接口, 需要使用sql语句, 代码繁琐 2.在处理大量数据时, 表关系更直观 3.在OC中不是可视化的 CoreData: ...
- CoreData数据库
一 CoreData 了解 1 CoreData 数据持久化框架是 Cocoa API 的一部分,首先在iOSS5 版本的系统中出现: 它允许按照 实体-属性-值 模式组织数据: ...
- iOS学习37数据处理之CoreData
1. CoreData数据库框架的优势 1> CoreData历史 CoreData数据持久化框架是Cocoa API 的一部分,首次在iOS5版本的系统中出现,它允许按照实体-属性-值模型组织 ...
- iOS进阶学习-CoreData
一.CoreData数据库框架的优势 1.CoreData数据持久化框架是Cocoa API的一部分,首次在iOS5版本的系统中出现,它允许按照实体-属性-值模型组织数据,并以XML.二进制文件或者S ...
- 对FMDB的封装JRDB
在自己开发中,每次用到数据库都会纠结是使用CoreData还是FMDB.CoreData虽然Api简单,但是调用栈非常复杂,要初始化一个Context需要至少20行代码.显然,对于这种这么恶心的情况, ...
- ios实例开发精品文章推荐(8.13)
提示用户对产品进行评价 http://www.apkbus.com/android-137752-1-1.html设置UILabel和UITextField的Insets http://www.apk ...
- 【CoreData】 简单地使用
先介绍一下什么是CoreData —— 它是在iOS5之后出现的一个框架,提供了对象-关系映射(ORM)的功能,既能够将OC对象转化成数据,保存在SQLite数据库文件中,也能将保存在数据库中的数据还 ...
随机推荐
- EasyUI DataGrid 修改每页显示数量的最大值&&导出Grid到Excel
首先,最近在搞那个DataGrid的导出,发现,网上的用JS导出到本地的方法虽然可用,但是只能导出DataGrid当前的数据,例如说,DataGrid默认是最大显示50行,但是如果有多页,那么就无法显 ...
- 窥探Swift系列博客说明及其Swift版本间更新
Swift到目前为止仍在更新,每次更新都会推陈出新,一些Swift旧版本中的东西在新Swift中并不适用,而且新版本的Swift会添加新的功能.到目前为止,Swift为2.1版本.去年翻译的Swift ...
- EntityFramework 7 开发纪录
博文目录: 暂时开发模式 Code First 具体体现 DbContext 配置 Entity 映射关联配置 Migration 问题纪录(已解决) 之前的一篇博文:EF7 Code First O ...
- 不要给<a>设置outline:none
outline属性有什么作用 原文链接 a{outline:none} do not do it 当用户使用tab键进行链接切换时,该属性会在当前选中的链接(获得焦点)使用该属性,一般来说是虚线框 的 ...
- Tools - Get technical information from the Internet
Official Sites Overview / QuickStart Guide / Docs / E-books Community / Fourm / Blog Demo / Download ...
- 自己动手丰衣足食之轮播图一动态修改marginTop属性实现轮播图
引言 学习jQuery有年头了,刚开始学习时自己动手写过轮播图,放的久了以至于忘了大致思路了.现在转而做前端,抽空把jquery轮播图拿出来写一写,把各种思路都自己练习练习,这里主要使用动态修改mar ...
- SQL Server SQL性能优化之--数据库在“简单”参数化模式下,自动参数化SQL带来的问题
数据库参数化的模式 数据库的参数化有两种方式,简单(simple)和强制(forced),默认的参数化默认是“简单”,简单模式下,如果每次发过来的SQL,除非完全一样,否则就重编译它(特殊情况会自动参 ...
- VC++6.0文件关联问题的解决方法
最近我的电脑*.c文件关联失败,无法实现双击*.c打开vc++6.0,感觉特别不爽. 在经过自己的琢磨研究后,终于找到了解决方法. 特此分享下,希望可以帮到遇到同样问题的你. 核心内容: 1.& ...
- [Java IO]02_字节流
概要 字节流有两个核心抽象类:InputStream 和 OutputStream.所有的字节流类都继承自这两个抽象类. InputStream 负责输入,OutputStream 负责输出. 字节流 ...
- Windows下程序打包发布时的小技巧
一.背景 Windows下开发的应用程序在发布时,需要将其依赖的一些动态链接库一起打进安装包里面去.这个时候,快速确定这个程序到底依赖哪些动态链接库变得非常重要.很久以前写过一篇关于Qt程序安装包制作 ...