1.在工程中添加build Phases的Link Binary with Libraries下添加CoreData的库。

2.在当前工程中新建文件选择CoreData——>DataModel,新建一个数据模型,往该模型中添加实体Entity,entity就是对应sqlite里面的表,一个实体对应一张表,有多个表就添加多个实体,然后往实体里面添加属性attributes,attributes就是sqlite表中的列。

3.在当前工程下右键新建CoreData ——>NSManageObject subclass,xcode会让你选择要生成的NSManageObjct subclass 的数据模型和实体,也就是说要生成对象模型所对应的数据库和表,添加完成后,新生成的对象模型里面有@dynamic 标记的对象,这是说对象的setter和getter方法由手动完成。

4.在使用CoreData的源文件中添加头

#import <CoreData/CoreData.h>

5.CoreData使用需要用到三个对象:

(1).NSManagedObjectContext

(2).NSManagedObjectModel

(3).NSPersistentStoreCoordinator

NSManagedObjectContext是进行数据持久化时的上下文,NSManagedObjectContext初始化时需要指定:NSPersistentStoreCoordinator

NSPersistentStoreCoordinator是数据持久化的助手,初始化时需要指定数据持久化时用到的数据存储类型:sqlite、xml、内存。还指定路径和NSManagedObjectModel

NSManagedObjectModel是对象模型

6.在源文件中添加三个属性:

@property ( strong , nonatomic) NSManagedObjectContext * coreDataContext;
@property ( strong , nonatomic) NSManagedObjectModel *   coreDataModel;
@property ( strong , nonatomic) NSPersistentStoreCoordinator  * coreDataPersistent;

并且进行延迟加载初始化:

-(NSManagedObjectModel *) coreDataModel
{if (_coreDataModel ==nil ) {_coreDataModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"resultsModel" withExtension:@"momd"]];}return _coreDataModel;
}
-(NSPersistentStoreCoordinator  *)coreDataPersistent
{if (_coreDataPersistent==nil) {_coreDataPersistent = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self coreDataModel]];NSString * path = [NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES) lastObject];NSURL * pathURL = [NSURL  fileURLWithPath:[path stringByAppendingString:@"resultsModel.sqlite" ]];NSError * error = nil;NSPersistentStore * store = [ _coreDataPersistent  addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:pathURL options:nil error:&error] ;if (!store) {[NSException raise:@"add database error" format:@"%@" ,[error localizedDescription]];}}return _coreDataPersistent ;
}-(NSManagedObjectContext *) coreDataContext
{if(_coreDataContext ==nil){_coreDataContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];[_coreDataContext setPersistentStoreCoordinator:[self coreDataPersistent]];}return _coreDataContext;
}

NSManagedObjectModel需要指定对象模型xxx.momd这个是新建的CoreData:xxx.xcdatamodeld自动在bundle下生成的。

插入数据:

 Results * insertResult = [NSEntityDescription insertNewObjectForEntityForName:@"Results" inManagedObjectContext: [self  coreDataContext]];insertResult.in = @"123";insertResult.re = @"ok";insertResult.reD = @"1";NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];[dateFormatter setDateFormat:@"YYYY-MM-dd hh:mm:ss"];insertResult.Time = [dateFormatter stringFromDate:[NSDate date]];NSError * error = nil;if(![[self coreDataContext] save: &error]){[NSException raise:@"save data to database error:" format:@"%@",[error localizedDescription]];}

这里的in .re .reD .Time 分别对应实体Results里面的属性in .re .reD .Time 对它们赋值后调用 [context save:&error] 就直接保存到数据库中。

读取数据:

 NSFetchRequest * databaseFecth = [[NSFetchRequest alloc] init];databaseFecth.entity = [NSEntityDescription entityForName:@"Results" inManagedObjectContext:[self coreDataContext]];NSArray * objs = [[self coreDataContext] executeFetchRequest:databaseFecth error:&error];if(error){[NSException raise:@"fetch data from database error:" format:@"%@",[error localizedDescription]];}for (NSManagedObject * obj in objs) {NSLog(@"%@", obj);}

需要注意的是如果直接使用_context而不是[self context] 来获取当前对象模型的上下文则会在运行时出错:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+entityForName: nil is not a legal NSManagedObjectContext parameter searching for entity name 'Results''

因为直接使用_context时是nil的,只有调用才不会为nil

转载于:https://www.cnblogs.com/panxiaochun/p/5284573.html

ios开发之CoreData使用相关推荐

  1. IOS开发之coreData

    2019独角兽企业重金招聘Python工程师标准>>> 注意在使用coreData的时候,注意创建工程的时候要勾选use core Data这一个选项,然后操作如下图:添加实体和实体 ...

  2. iOS开发之AVKit框架使用

    2019独角兽企业重金招聘Python工程师标准>>> iOS开发之AVKit框架使用 一.引言 在iOS开发框架中,AVKit是一个非常上层,偏应用的框架,它是基于AVFounda ...

  3. (0045) iOS 开发之MBProgressHUD 源码学习

    (0045) iOS 开发之MBProgressHUD 源码学习 第一部分:学习所得和分析线程 1.  学习到了kvo 的使用 和屏幕方向的旋转判断. 2. 如果调起这个 HUD 的方法不是在主线程调 ...

  4. (0016)iOS 开发之Mac上Navicat Premium 创建远程连接和本地连接

    1.下载安装 (百度云盘里面有安装文件和注册机) 链接: https://pan.baidu.com/s/1kVG1k71 密码: mr5g 破解教程看这篇博客:http://blog.csdn.ne ...

  5. 李洪强iOS开发之RunLoop的原理和核心机制

    李洪强iOS开发之RunLoop的原理和核心机制 搞iOS之后一直没有深入研究过RunLoop,非常的惭愧.刚好前一阵子负责性能优化项目,需要利用RunLoop做性能优化和性能检测,趁着这个机会深入研 ...

  6. IOS开发之MD5加密和钥匙串的使用-oc

    IOS开发之MD5加密和钥匙串的使用-oc 源码在我的主页,md5加密是用户登录安全的一个保障.不可逆的,可以暴力破解的. // // ViewController.m // MD5演练 // // ...

  7. IOS开发之CALayer基本属性和使用

    IOS开发之CALayer基本属性和使用 // // ViewController.m // CALayer // // Created by 鲁军 on 2021/2/21. //#import & ...

  8. ios开发之plist 的文件的读写以及沙盒容器路径打印

    ios开发之plist 的文件的读写以及沙盒容器路径打印 核心代码在这里 // // ViewController.m // 21-plist存储和沙盒路径 // // Created by 鲁军 o ...

  9. IOS开发之JSON文件的读写

    IOS开发之JSON文件的读写 // // ViewController.m // 20-JSON的读写 // // Created by 鲁军 on 2021/2/13. //#import &qu ...

  10. IOS开发之JSON序列化从客户端发送到服务器端

    IOS开发之JSON序列化从客户端发送到服务端的准备工作 共有6种情况 需要序列化 请查看源代码. 服务器端接受我们采用的是java的Tomcat服务器.配合 struts 2 controller框 ...

最新文章

  1. 浅谈html5 响应式布局
  2. Android 中点击某个按钮实现 返回键 的功能
  3. 后端系统架构 听课笔记
  4. [react] React怎么判断什么时候重新渲染组件呢
  5. PyTorch框架学习六——图像预处理transforms(二)
  6. 过分的谜题 模拟+思维题
  7. 剖析 ADO.NET 批处理更新
  8. 实现财务自由-《富爸爸穷爸爸》读书语句摘抄
  9. Algorithm:数学建模大赛(CUMCM/NPMCM)之建模历年题目类型、数据分析及官方评阅要点之详细攻略
  10. CISP 考试教材《第 4 章 知识域:业务连续性》知识整理
  11. 学生成绩分析之成绩的预处理 python3 pandas 学生成绩汇总到一张表
  12. 使用DOSBox自动进入debug模式
  13. 2019.4 sigfox EMC
  14. java web 速成_渐进式Web应用程序:速成课程
  15. 【Unity3D】AudioSource组件
  16. 小说里的管理软件现状
  17. opencv柱面投影,C语言实现
  18. Phoenix and Balance
  19. 一个男人关心的东西决定他的层次
  20. rtx 加密机制_[原创]RTX(腾讯通)本地保存密码TEA变形算法及还原器

热门文章

  1. 如何在Mac上合并日历
  2. Flutter实战:手把手教你写Flutter Plugin
  3. 统一对外的接口,支持requestBody以及表单提交的坑
  4. 面向对象学习(1):认识软件系统的复杂性
  5. php的变量引用与销毁机制
  6. 一个网站的诞生- MagicDict未来予想図1 [水平分割数据表的构想]
  7. charles抓包工具的使用:手机抓包设置和安装证书
  8. 面试官:你是如何调用 wait() 方法的?使用 if 还是 while?别答错了!
  9. 关于中国男女的一些私密数据......
  10. 产品经理给程序员发了一个“在吗”