CoreData 的使用

article/2025/8/19 20:22:13

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{}}}

就是这么简单。


http://chatgpt.dhexx.cn/article/cOXARBJK.shtml

相关文章

Core Data的使用

初步看了一下Core Data这个东西&#xff0c;本想早一点写这篇东西的&#xff0c;不过各种俗事缠身&#xff0c;又觉得自己对于Core Data机制了解的还不够深&#xff0c;动笔就慢了几天。不过今天盘点一下&#xff0c;觉得可以说一点东西出来就先说一点吧。 Core Data到底是个什…

CoreData简单使用

苹果的CoreData框架&#xff08;不限于&#xff09;提供了一种数据持久化解决方案&#xff0c;它基于如下结构&#xff08;图片来源苹果官网&#xff09;&#xff1a; 其中涉及了几个概念&#xff1a; NSManagedObject: 数据库中一条记录在内存的实例。 NSManagedObjectConte…

ios中的coredata的使用

Core Data数据持久化是对SQLite的一个升级&#xff0c;它是ios集成的&#xff0c;在说Core Data之前&#xff0c;我们先说说在CoreData中使用的几个类。 &#xff08;1&#xff09;NSManagedObjectModel(被管理的对象模型) 相当于实体&#xff0c;不过它包含 了实体间的关系 (2…

CoreData使用

一、CoreData的简单使用 1.什么是CoreData 先认识一下这几个类 (1)NSManagedObjectContext&#xff08;被管理的数据上下文&#xff09; 作用&#xff1a;用来管理所有表的操作&#xff0c;对表的实体对应的数据库中的表的操作&#xff08;插入&#xff0c;查询&#xff0c;修改…

iOS CoreData的使用

CoreData是一个专门管理数据服务的框架&#xff0c;把OC对象和存储在SQLite文件中的数据进行互相转换&#xff0c;极大地方便了开发者在数据服务方面的开发。 1. 创建CoreData 在文件创建区下&#xff0c;选择【Core Data】下的【Data Model】 输入CoreData的文件名Model.x…

Core Data 概述

Core Data 概述 转载自&#xff1a; http://www.cocoachina.com/newbie/basic/2013/0911/6981.html Core Data可能是OS X和iOS里面最容易被误解的框架之一了&#xff0c;为了帮助大家理解&#xff0c;我们将快速的研究Core Data&#xff0c;让大家对它有一个初步的了解&#x…

CoreData相关01 基础及运用:添加、查询、过滤、排序、分页

CoreData CoreData中几乎不用写数据库操作语句就能完成数据的本地化存储。 CoreData和iOS中的模型对象相联系在一起&#xff0c;只需要操作模型对象的增删改查就可以完成数据的增删改查&#xff0c;不用写SQL语句。 CoreData的存储方式 SQLite NSSQLiteStoreType XML NSXML…

JVM原理分析

JVM原理分析 为什么Java是一种跨平台语言 1、不同系统的JDK下载 JDK里面有&#xff1a;Jre和Jvm&#xff0c;其中就有JVM指令集的不同 JVM主要结构&#xff1a; 栈、堆、方法区、程序计数器、本地方法栈 mian方法的执行 通过类装载子系统进入JVM 其中栈中存放线程 来一个…

JVM实现原理

JVM原理 1、概念简介2、为什么要学习JVM虚拟机&#xff1f;3、JVM怎么学&#xff1f;3.1 内存管理1、jvm运行时数据区 1、概念简介 JVM&#xff1a;JAVA虚拟机JRE&#xff1a;Java运行环境 JREJVM虚拟机Java核心类库支持文件JDK&#xff1a;Java开发工具包 JDKJREJava工具Java…

【JVM调优】JVM原理与性能调优

一、参考资料 今日头条https://www.toutiao.com/i7007696978586976805

JVM原理和调优的理解和学习

JVM原理和调优的理解和学习 一、详解JVM内存模型二、JVM中一次完整的GC流程是怎样的三、GC垃圾回收的算法有哪些四、简单说说你了解的类加载器五、双亲委派机制是什么&#xff0c;有什么好处&#xff0c;怎么打破六、说说你JVM调优的几种主要的JVM参数七、JVM调优八、类加载的机…

JVM原理-jvm内存模型

一、jvm内存模型 结构图 JVM包含两个子系统和两个组件 Class loader(类装载子系统) 根据给定的全限定名类名(如&#xff1a;java.lang.Object)来装载class文件到 Runtime data area运行时数据区中的method area方法区中Execution engine(执行引擎) 执行classes中的指令Runt…

JVM原理-垃圾回收机制及算法

JVM原理-jvm内存模型 jvm内存模型 一、垃圾回收机制算法 1、 判断对象是否回收算法 垃圾收集器在做垃圾回收的时候&#xff0c;首先需要判定的就是哪些内存是需要被回收的&#xff0c;哪些对象是存活的&#xff0c;是不可以被回收的&#xff1b;哪些对象已经死掉了&#xf…

jvm面试原理

1、什么是JVM JVM是Java Virtual Machine&#xff08;Java虚拟机&#xff09;的缩写&#xff0c;JVM是一种用于计算设备的规范&#xff0c;它是一个虚构出来的计算机&#xff0c;是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组…

JVM原理和JVM内存的整理

JVM原理及JVM内存 JVM原理及JVM内存概念这么说1.JVM的基本过程2.JVM的中的“解释”原理&#xff0c;三个重要机制3.JVM的体系结构4.运行时数据区JVM垃圾回收 JVM原理及JVM内存 之前看了许多JVM原理的文章、写作的大牛们都讲的很透彻&#xff0c;但是私下觉得&#xff1a;写得详…

JVM原理和调优(读这一篇就够了)

前言 抛2个问题&#xff1a; 1、export JAVA_OPTS"-Xms256m -Xmx512m -Xss256m -XX:PermSize512m -XX:MaxPermSize1024m -Djava.rmi.server.hostname136.64.45.24 -Dcom.sun.management.jmxremote.port9315 -Dcom.sun.management.jmxremote.sslfalse -Dcom.sun.manageme…

JVM工作原理

JVM的生命周期 &#xff08;1&#xff09;两个概念&#xff1a;JVM实例和JVM执行引擎实例 JVM实例对应了一个独立运行的java程序&#xff0c;它是进程级别的 JVM执行引擎实例则对应了属于用户运行程序的线程&#xff0c;它是线程级别的 &#xff08;2&#xff09;VM实例的诞生…

JVM原理与实战

JVM原理 类加载流程和内存分配栈帧操作一、JVM垃圾回收算法主动加载的几种方式?符号引用和直接引用1.1 什么是垃圾(Garbage Collection)回收?1.2 引用计数法(Reference Conting)1.3 标记清除法 *(Mark - Sweep)1.4 复制算法 *(Copying)1.4.1 复制算法在JVM中的应用1.…

jvm原理与性能调优

文章目录 一、JVM内存结构 1.运行时数据区 2.直接内存 二、JVM中的对象 1.对象的创建 2.对象的内存布局 3.对象的访问定位 三、垃圾回收算法和垃圾回收器 1. 如何判断对象是已死 2.分代回收理论 3.垃圾回收算法 4.垃圾收集器 四、JVM执行子系统 1.Class文件结构 2.类加载机制 3…