CoreData 的使用
CoreData其实就是Apple为开发者提供的便捷数据存储方式,本质是对sqlite数据库的操作,操作的数据量为中到大量。
操作数据库,还有FMDB第三方库,相比于FMDB,CoreData要更简单,更方便。
集成CoreData:
1,创建工程勾选,user core data:
2,已有项目添加CoreData,添加文件New File>Data Model,创建如下后缀名文件,编译后也叫.momd或.mom后缀,只不过代码中必须用.momd
这是可视化的模型文件,可创建一个或多个实体(Entity),相当于数据库中的表,因为操作的是数据型关系库,实体间可以进行关联(relationship)
特别的,如果是已有objective-c项目添加.xcdatamodeld文件,编译提示swift version错误,修改xcdatamodeld文件配置即可,如下
以上是添加xcdatamodeld文件部分,下面就是代码部分:
1,AppDelegate部分
2,增删改查部分
1,AppDelegate部分:
.h文件添加三个属性
//管理存储对象上下文@property (readonly,strong,nonatomic)NSManagedObjectContext *managedObjectContext;//管理存储对象,数据库的model@property (readonly,strong,nonatomic)NSManagedObjectModel *managedObjectModel;//协调者,上下文和model的协调者@property (readonly,strong,nonatomic)NSPersistentStoreCoordinator *persistentStoreCoordinator;
.m文件添加synthesize,为了开发者的个性化使用,@property后,系统不自动生成setter,getter方法,必须要加的,方便配置不同信息,
@synthesize managedObjectContext =_managedObjectContext;@synthesize managedObjectModel = _managedObjectModel;@synthesize persistentStoreCoordinator = _persistentStoreCoordinator;
以下是三个属性getter方法和一个数据库存储位置方法:
#pragma mark - Core Data
- (NSManagedObjectContext *)managedObjectContext
{if (_managedObjectContext !=nil) {return _managedObjectContext;}NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];if (coordinator != nil) {_managedObjectContext = [[NSManagedObjectContext alloc]init];[_managedObjectContext setPersistentStoreCoordinator:coordinator];}return _managedObjectContext;
}- (NSManagedObjectModel *)managedObjectModel
{if (_managedObjectModel !=nil) {return _managedObjectModel;}//source名字是自己Model.xcdatamodeld名字NSURL *modelURL = [[NSBundle mainBundle]URLForResource:@"Model"withExtension:@"momd"];_managedObjectModel = [[NSManagedObjectModel alloc]initWithContentsOfURL:modelURL];return _managedObjectModel;
}- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{if (_persistentStoreCoordinator !=nil) {return _persistentStoreCoordinator;}//这里的model.sqlite,自己定,最好按业务来NSURL *storeURL = [[self applicationDocumentsDirectory]URLByAppendingPathComponent:@"model.sqlite"];NSError *error = nil;_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc]initWithManagedObjectModel:[self managedObjectModel]];if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {NSLog(@"Unresolvederror %@, %@", error, [error userInfo]);abort();}return _persistentStoreCoordinator;
}#pragma mark - Application's Documents directory
- (NSURL*)applicationDocumentsDirectory
{return[[[NSFileManager defaultManager]URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask]lastObject];
}
2,增删改查部分:
//获取数据库实体,查询结果
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{AppDelegate *appDele = (AppDelegate *)[UIApplication sharedApplication].delegate;//将获取请求的实体设置为Person对象NSEntityDescription *personEntity = [NSEntityDescription entityForName:@"Woman" inManagedObjectContext:appDele.managedObjectContext];//创建一个新的请求NSFetchRequest *request = [NSFetchRequest new];[request setEntity:personEntity];//为请求设置一个谓词来限制请求的结果,不设置也可以
// NSPredicate *query = [NSPredicate predicateWithFormat:@"name like %@",@"*22*"];
// [request setPredicate:query];//获取结果NSError *error = nil;NSArray *fetchResults = [appDele.managedObjectContext executeFetchRequest:request error:&error];}
fetchResults就是查询结果
//增
for (int i =0; i<5; i++) {Person *n = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:appDele.managedObjectContext];[n setName:[NSString stringWithFormat:@"person name-%d",(int)(i+[fetchResults count])]];Woman *wo = [NSEntityDescription insertNewObjectForEntityForName:@"Woman" inManagedObjectContext:appDele.managedObjectContext];[wo setRelationship:n];[wo setName:[NSString stringWithFormat:@"woman name-%d",(int)(i+[fetchResults count])]];}//调用保存上下文,将修改提交到持久化存储中NSError *error = nil;if (![appDele.managedObjectContext save:&error]) {NSLog(@"保存出错");}else{clicked = YES;}
//删//查询、删除操作if ([fetchResults count] > 0) {for (int i =0; i<[fetchResults count]; i++) {Woman *person = [fetchResults objectAtIndex:i];[appDele.managedObjectContext deleteObject:person];if (![appDele.managedObjectContext save:&error]) {NSLog(@"保存出错");}else{}}}
//改//查询、修改操作if ([fetchResults count] > 0) {for (int i =0; i<[fetchResults count]; i++) {Woman *person = [fetchResults objectAtIndex:i];person.name = [NSString stringWithFormat:@"%@++++",person.name];if (![appDele.managedObjectContext save:&error]) {NSLog(@"保存出错");}else{}}}
就是这么简单。
CoreData 的使用相关推荐
- iOS开发-xcdatamodeld文件 CoreData的介绍和使用,sqlite的使用
CoreData的介绍和使用 源引:http://www.jianshu.com/p/d027090af00e CoreData是数据存储的一种方式,CoreData实质也是对SQLite的封装. ...
- ios技术篇-CoreData
ios技术篇-CoreData 上一篇: iOS技术篇-CocoaPods 目录 下一篇:
- 数据持久化(六)之Using CoreData with MagicalRecord
第五节里面,我介绍了CoreData的配置和主要的增删改查,可能非常多人会认为用它真繁琐.这里,我再介绍网上大神对它进行了人性化封装的第三方MagicalRecord,正如FMDB对sqlite进行了 ...
- coredata Lightweight Migration 心得
关于coredata 网上的相关资料比较少,大部分是基本用法.于是便找到苹果官方文档进行深入学习. 分享一下心得,如果用了coredata 必须懂得 coredata Migration,否则app版 ...
- CoreData的简单使用
一.CoreData的简单使用 准备工作 创建数据库 新建文件,选择CoreData -> DataModel 添加实体(表),Add Entity 给表中添加属性,点击Attributes下方 ...
- Coredata — 入门使用
CoreData的底层实现尽管是使用的sqlite数据库.但是CoreData在使用起来但是和sqlite大相径庭.可能你会发现你连一句sql语句都不要写.CoreData存在于应用程序和持久化存储区 ...
- 数据库结构Sqlite与CoreData
改章节是一篇关于数据库结构的帖子 这两个就不是同一个层面的东西,core data是ORM框架+objects graph,它可以选择sqlite,xml,plist或是其他方式作为持久化方案.所以如 ...
- iphone开发之数据库CoreData
CoreData 介绍 在Cocoa环境下,如果你想使用数据库(如sqlite),你可以使用sql语句的方式通过相关的工具类进行数据库的直接操作.当然你也可以通过别人封装之后的一些简单框架,使得你的操 ...
- 使用CoreData的轻量级自动数据迁移
使用IOS的CoreData进行存储很方便,CoreData已经帮我们做了很多基础的工作,一般情况下没必要自己操作数据库了. 在开发中修改了实体模型,可能会遇到schema incompatibili ...
- 让CoreData更简单些
从简书迁移到掘金 前言 本文并不是CoreData从入门到精通之类的教程, 并不会涉及到过多的原理概念描述, 而是介绍如何让CoreData的使用变得更加简单明了, 方便亲民. 全文约六千字, 预计花 ...
最新文章
- C# 笔记 .net与C#简单说明
- 【干货】2014年iOS推广四大秘籍
- android频道编辑实现_短说频道功能详解—构建你社区的小门户
- 设置android电话震动,Android手机震动的设置步骤
- 【VS开发】PCIe体系结构的组成部件
- xml怎么转换html文件,xml转换成html文件方法
- .gitignore文件将已经纳入版本管理的文件删除
- Spring+EhCache缓存实例(详细讲解+源码下载)
- 【HDU - 6237】A Simple Stone Game(贪心,思维,素因子分解,数学)
- 洛谷【数据结构1-1】线性表
- 计算机应用的核心能力,应用能力为核心的高职计算机应用分析
- 【复】基于 WebRTC 的音视频在线监考模块的设计与实现(下)
- 串口仪器控制(下篇)——利用虚拟串口模拟仪器
- Hibernate注解 @Enumerated
- CS入门学习笔记14-MIT 6.00.1x- Lecture 12 Object Oriented Programming (Class Generator
- 【文献翻译】思科路由器安全配置合规性的SCAP基准-SCAP Benchmark for Cisco Router Security Configuration Compliance
- 图钉能按到墙上吗_图钉怎么钉在墙上
- 关于python中的字符串映射转换
- Blur大战Opensea:a16z的奶酪与Paradigm的独食
- Java Util 类