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 的使用相关推荐

  1. iOS开发-xcdatamodeld文件 CoreData的介绍和使用,sqlite的使用

    CoreData的介绍和使用  源引:http://www.jianshu.com/p/d027090af00e CoreData是数据存储的一种方式,CoreData实质也是对SQLite的封装. ...

  2. ios技术篇-CoreData

    ios技术篇-CoreData 上一篇: iOS技术篇-CocoaPods       目录        下一篇:

  3. 数据持久化(六)之Using CoreData with MagicalRecord

    第五节里面,我介绍了CoreData的配置和主要的增删改查,可能非常多人会认为用它真繁琐.这里,我再介绍网上大神对它进行了人性化封装的第三方MagicalRecord,正如FMDB对sqlite进行了 ...

  4. coredata Lightweight Migration 心得

    关于coredata 网上的相关资料比较少,大部分是基本用法.于是便找到苹果官方文档进行深入学习. 分享一下心得,如果用了coredata 必须懂得 coredata Migration,否则app版 ...

  5. CoreData的简单使用

    一.CoreData的简单使用 准备工作 创建数据库 新建文件,选择CoreData -> DataModel 添加实体(表),Add Entity 给表中添加属性,点击Attributes下方 ...

  6. Coredata — 入门使用

    CoreData的底层实现尽管是使用的sqlite数据库.但是CoreData在使用起来但是和sqlite大相径庭.可能你会发现你连一句sql语句都不要写.CoreData存在于应用程序和持久化存储区 ...

  7. 数据库结构Sqlite与CoreData

    改章节是一篇关于数据库结构的帖子 这两个就不是同一个层面的东西,core data是ORM框架+objects graph,它可以选择sqlite,xml,plist或是其他方式作为持久化方案.所以如 ...

  8. iphone开发之数据库CoreData

    CoreData 介绍 在Cocoa环境下,如果你想使用数据库(如sqlite),你可以使用sql语句的方式通过相关的工具类进行数据库的直接操作.当然你也可以通过别人封装之后的一些简单框架,使得你的操 ...

  9. 使用CoreData的轻量级自动数据迁移

    使用IOS的CoreData进行存储很方便,CoreData已经帮我们做了很多基础的工作,一般情况下没必要自己操作数据库了. 在开发中修改了实体模型,可能会遇到schema incompatibili ...

  10. 让CoreData更简单些

    从简书迁移到掘金 前言 本文并不是CoreData从入门到精通之类的教程, 并不会涉及到过多的原理概念描述, 而是介绍如何让CoreData的使用变得更加简单明了, 方便亲民. 全文约六千字, 预计花 ...

最新文章

  1. C# 笔记 .net与C#简单说明
  2. 【干货】2014年iOS推广四大秘籍
  3. android频道编辑实现_短说频道功能详解—构建你社区的小门户
  4. 设置android电话震动,Android手机震动的设置步骤
  5. 【VS开发】PCIe体系结构的组成部件
  6. xml怎么转换html文件,xml转换成html文件方法
  7. .gitignore文件将已经纳入版本管理的文件删除
  8. Spring+EhCache缓存实例(详细讲解+源码下载)
  9. 【HDU - 6237】A Simple Stone Game(贪心,思维,素因子分解,数学)
  10. 洛谷【数据结构1-1】线性表
  11. 计算机应用的核心能力,应用能力为核心的高职计算机应用分析
  12. 【复】基于 WebRTC 的音视频在线监考模块的设计与实现(下)
  13. 串口仪器控制(下篇)——利用虚拟串口模拟仪器
  14. Hibernate注解 @Enumerated
  15. CS入门学习笔记14-MIT 6.00.1x- Lecture 12 Object Oriented Programming (Class Generator
  16. 【文献翻译】思科路由器安全配置合规性的SCAP基准-SCAP Benchmark for Cisco Router Security Configuration Compliance
  17. 图钉能按到墙上吗_图钉怎么钉在墙上
  18. 关于python中的字符串映射转换
  19. Blur大战Opensea:a16z的奶酪与Paradigm的独食
  20. Java Util 类

热门文章

  1. MFC的进度栏的编程
  2. 手机连接不上Charles代理问题(已解决,绝对有效)
  3. Python爬虫实例:爬取猫眼电影——破解字体反爬
  4. 基础数论算法(4) 中国剩余定理
  5. elementUI级联选择器(Cascader)回显问题和clearCheckedNodes无效的解决方法
  6. 关于ADFS的局限性,你了解多少?
  7. html5一阶段考试题,千锋HTML5-JS阶段第三周理论考试题目02
  8. 腾讯笔试算法题-开锁
  9. 一分钟了解自动化测试 1
  10. 14-射频校准的原理和设置