iOS CoreData之单表操作(增删改查)

OC增删改查 NSString *str=@"fsdggfhjtyhdrfsdh"; //单个删除 NSString *str1=[str substringFromIndex:1]; NSLog(@"%@",str1); //选择删除 NSString *str2=[str substringWithRange:NSMakeRange(0, 3)]; NSLog(@"%@",str2); //添加 NSString *str3=[str1 stringByAppendingString:str2]; NSLog(@"%@",str3); //修改 NSString *str4=[str stringByReplacingOccurrencesOfString:@"sdgg" withString:@""]; NSLog(@"%@",str4); NSMutableString *sr=[NSMutableString stringWithFormat:@"%@",@"sdfdgdfg"]; //增加 [sr appendFormat:@"ad"]; NSLog(@"%@",sr); //增加 [sr appendFormat:@"%@",@"ad"]; NSLog(@"%@",sr); //删除 [sr deleteCharactersInRange:NSMakeRange(0,3)]; NSLog(@"%@",sr); //插入 [sr insertString:@"ddddd" atIndex:4]; NSLog(@"%@",sr); //修改 [sr replaceCharactersInRange:NSMakeRange(0,4) withString:@""]; NSLog(@"%@",sr); 立即下载

CoreData框架, 具有一种对象<-->关系映射机制, 即能够将OC对象转化为数据保存在SQLite(数据库)中, 同时也能够将SQLite中的数据还原为OC对象, 而在此相互转化过程中, 我们无需写繁琐的sql语句.

接下来以单表的增删改查为例:

如果你一开始就能预测到你得工程会用到数据库, 那么创建工程之时, 请不要忽视Xcode对你善意的提醒:


当然, 如果你在创建工程之初, 操作过快而忽略了这个, 也是可以添加的:


这样, CoreData的模型文件就创建号了. 在数据库中, 操作的对象叫"表", 而在CoreData中, 操作的对象叫做"Entity"; 表中字段, 对应于"Entity"中的"Attribute".  工程中有了模型文件, 接下来就是"Attribute"的设置了, 都是可视化的操作, 很简单:


如上图, 创建一个包含三个属性(Attribute)的名为"Person"的实体(Entity), 各属性对应得数据类型如上图, 模型文件 实体 属性 都创建好了, 接下来就是coding了:


导入CoreData库及头文件:

#import <CoreData/CoreData.h>

搭建上下文环境: 创建NSManagedObjectContext的实例, 之后的增删改查都是基于此实例:

// 加载模型文件
    NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];
    // 初始化NSPersistentStoreCoordinator
    NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
    // 沙盒路径的Documents文件夹
    NSString *docs = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    // 数据库文件的绝对路径
    NSURL *url = [NSURL fileURLWithPath:[docs stringByAppendingPathComponent:@"person.data"]];
    // 添加持久化存储库,这里使用SQLite作为存储库
    NSError *error = nil;
    NSPersistentStore *store = [psc addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:&error];
    if (store == nil) { // 直接抛异常
        [NSException raise:@"添加数据库错误" format:@"%@", [error localizedDescription]];
    }
    // 初始化上下文,设置persistentStoreCoordinator属性
    NSManagedObjectContext *context = [[NSManagedObjectContext alloc] init];
    context.persistentStoreCoordinator = psc;

添加数据:

// 传入上下文,创建一个Person实体对象
    NSManagedObject *person = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:context];
    // 设置Person的简单属性
    [person setValue:@"Macro" forKey:@"name"];
    [person setValue:@(26) forKey:@"age"]; // 非对象数据要注意
    [person setValue:@"male" forKey:@"sex"];
    // 利用上下文对象,将数据同步到持久化存储库
    error = nil;
    BOOL success = [context save:&error];
    if (!success) {
        [NSException raise:@"访问数据库错误" format:@"%@", [error localizedDescription]];
    } else {
        NSLog(@"保存成功");
    }

查询数据:

// 初始化一个查询请求
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    // 设置要查询的实体
    request.entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:context];
    // 执行请求
    error = nil;
    NSArray *objs = [context executeFetchRequest:request error:&error]; // 查询结果是数组
    if (error) {
        [NSException raise:@"查询错误" format:@"%@", [error localizedDescription]];
    }
    // 遍历数据
    for (NSManagedObject *obj in objs) {
        NSLog(@"name:%@ age:%@", [obj valueForKey:@"name"], [obj valueForKey:@"age"]);
    }


如果需要添加查询约束, 则可设置request的相关属性值即可:

    // 设置排序(按照age降序)
    NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:NO];
    request.sortDescriptors = [NSArray arrayWithObject:sort];
    // 设置条件过滤(模糊查询) 数据库SQL语句中的%要用*来代替
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name like %@", @"*Ma*"];
    request.predicate = predicate;

删除数据:

// 遍历数据 在遍历的基础上删除
    for (NSManagedObject *obj in objs) {
        if ([[obj valueForKey:@"name"] isEqualToString:@"Macro"]) {
            [context deleteObject:person];
            error = nil;
            [context save:&error]; // 删除之后一定要保存(可以在删除完全之后,统一保存)
            if (error) {
                [NSException raise:@"删除错误" format:@"%@", [error localizedDescription]];
            } else {
                NSLog(@"删除成功");
            }
        }
    }
直接删除实例对象:

    [context deleteObject:person];
    error = nil;
    [context save:&error];
    if (error) {
        [NSException raise:@"删除错误" format:@"%@", [error localizedDescription]];
    } else {
        NSLog(@"删除成功");
    }

修改数据:(和删除类似)

    for (NSManagedObject *obj in objs) {
        if ([[obj valueForKey:@"name"] isEqualToString:@"Macro"]) {
            [obj setValue:@"MacroHong" forKey:@"name"];
            error = nil;
            [context save:&error];
            if (error) {
                [NSException raise:@"更新错误" format:@"%@", [error localizedDescription]];
            } else {
                NSLog(@"更新成功");
            }
        }
    }

如何查看上述操作的SQL语句呢?


"Edit Scheme..." --> "Run" --> "Arguments" 添加2项
 -com.apple.CoreData.SQLDebug
 1

这样在Output窗口中就可以看得到每一步操作的SQL语句了


默认情况下的用键-值对来存取数据, 可能满足不了项目的需求, 因为一般情况下都需要在数据模型层进行业务操作, 这样就必须创建NSManagedObject的子类:





创建完成之后, 工程目录下会自动多出这四个文件,(Xcode7之前应该没有上面两个类别文件), 这样就可以操作对象属性来进行相关操作了:

Person *person = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:context];
person.name = @"Macro";
person.age = @(26);
person.sex = @"male";
// 最后调用[context save&error];同步到数据库即可



从理论到实践:使用Sigrity SystemSI完成DDR4信号完整性仿真全流程解析 本文详细解析了使用Sigrity SystemSI完成DDR4信号完整性仿真的全流程,从核心挑战到实战操作。文章深入探讨了DDR4信号完整性问题,介绍了SystemSI工具链的演进与分工,并提供了从前期准备到高级技巧的详细指南,帮助工程师有效解决DDR4设计中的信号完整性问题。 阅读详情

相关推荐

别再死记硬背注意力机制了!用Python+PyTorch从零实现一个HAN(Hierarchical Attention Network)

本文详细介绍了如何使用Python和PyTorch从零实现Hierarchical Attention Network(HAN),通过代码级解析帮助读者深入理解层次注意力机制。文章涵盖词级和句子级注意力层的构建、完整HAN架构的实现、训练技巧及注意力可视化方法,特别适合希望掌握高级NLP技术的开发者。

weixin_28744423的博客 163

coreData删除整张表的方法

YFF_AppDelegate *delegate = (YFF_AppDelegate *)[[UIApplication sharedApplication]delegate]; //这里需要引进项目的委托,是让全局managedObjectContext起作用     NSManagedObjectContext *context = delegate.managedObjectCon

oik_ios的专栏 2135

告别老旧内核!手把手教你为Android 10设备手动更新WebView(以升级至97版为例)

本文详细指导如何在Android 10设备上手动更新WebView至97版,解决老旧内核导致的兼容性、性能和安全问题。通过ADB命令和图形化操作两种方案,无需Root即可完成升级,显著提升网页加载速度和安全性。

weixin_28672681的博客 582

07-CoreData清除所有数据

CoreData清空数据库 清空数据库可以使用删除文件的方式 通过沙盒路径进入到沙盒可以看到数据库文件有三个,我们逐一删除便可 代码中的kFileName是一个宏 表示创建的数据库文件名 NSF

坤小的专栏 5992

matinal:SAP ABAP 关于sftp的发送接收源代码

如果您将目标系统的凭据存储在该 RFC 连接中,您可以安排程序并将其作为后台作业运行:凭据将从 SM59 配置中获取,并且在文件传输期间不会提示您输入它们。这尤其适用于安全问题:您有责任为您的编码添加安全功能,并相应地配置您的系统(例如,保护您的系统免受病毒侵害)。注意:在创建自己的程序时,请特别注意示例代码中以“@CUSTOMER”开头的注释,因为您需要实现自己的逻辑。本说明为您提供示例编码以支持您创建自己的程序。在 STRUST 事务中,您维护了一个 PSE 并导入了您要发送的文件的最终收件人的证书。

matinal 當冬夜漸暖 。公众号:matinal 1333

Android wifi源码分析(二) Wifi关闭流程

接着上一篇,这篇说一下Wifi的关闭流程。 由上一篇可以知道,framework层提供的wifi开关接口都是**setWifiEnabled**,只是参数不同而已。*true*表示开启wifi、*false*表示关闭wifi。

奋斗的菜鸟ing 3298

IOS开发之CoreData中数据的删除

原始地址:http://blog.youkuaiyun.com/acorld/article/details/11164695 本文主要总结项目开发中,CoreData中,删除数据库数据的几种操作方式。 一、使用上下文的deleteObject方法 [cpp] view plaincopyprint?  NSManagedObjectContex

happyrabbit456的专栏 1408

如何在INCA中修改标定量的初始值,并刷回控制器

测试过程中,有些时候,标定量来不及修改,这就需要修改标定量的初始值了,又不想打开模型重新编译,因此直接在INCA中修改,然后再刷回控制器,就成了最佳选择,之前也学过,长时间不用,忘记怎么搞了,最近又用到了,这次记录一下,以后用到的时候,就不用在网上东翻西找了。截止到2023年11月24日,共找到了两种方法可以实现修改。

weixin_43406519的博客 4200

15-CoreData删除所有数据之NSBatchDeleteRequest

在CoreData的增删改查操作中,均由管理对象上下文NSManagedObjectContext来负责,在iOS9之前我们要想清除某一个实体Entity(相当于数据库中的表)的所有数据,要么通过查询所有数据之后便利删除,要么删除整个数据库文件详情可以参考我的这篇博客: 07-CoreData清除所有数据 而在iOS9之后,苹果新增了专用于清除某一个实体所有数据的类:NSBatchDeleteReq

坤小的专栏 4459

【安全设备篇】HVV面试专题

还有就是这个可能是被访问的这个内网系统,本身业务系统存在业务逻辑问题,因为内网所布置的很多业务系统往往不会考虑一些安全性问题,比如在正常的业务逻辑请求中直接带了sql语句,就会触发设备规则产生告警,这一类是属于误报,然后会将此告警上报给研判人员,需要研判组专家和甲方客户确认下是否是该系统存在此业务逻辑问题,并且需要确认告警的源ip在此告警的时间段附近有没有进行操作过。天眼日志分析主要基于系统和应用程序的日志数据来识别安全威胁,而威胁感知则通过收集和分析多种来源的情报信息。理解威胁的性质和威胁背后的原理。

大河之犬的博客 7924

基于Django+Vue3的目标检测系统设计与实现,Web前后端分离,Vue3前台系统+Django后台管理系统开发,YOLOv11 Web目标检测,实现图片、视频和摄像头检测等功能,全网独发

基于Django+Vue3的智能目标检测系统设计与实现,Web前后端分离,YOLOv11 Web目标检测,Vue3前台系统+Django后台管理系统开发,实现图片检测、视频检测、摄像头检测、登录、注册和个人中心功能

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 3668

iOS Core Data 数据迁移 指南

前言 Core Data是iOS上一个效率比较高的数据库框架,(但是Core Data并不是一种数据库,它底层还是利用Sqlite3来存储数据的),它可以把数据当成对象来操作,而且开发者并不需要在乎数据在磁盘上面的存储方式。它会把位于NSManagedObject Context里面的托管对象NSManagedObject类的实例或者某个NSManagedObject子类的实例,通过NSMana

zhangyulin311的博客 4788

UG NX二次开发-博客文章速览

写了一些UG NX二次开发的心得体会,内容较多,感觉不好查找相应的内容,所以决心把导航写出来,方便自己也方便读者。主专栏是“”,C#专栏为 : “” ,Python专栏为 : “这三个专栏都会持续的更新。如果有需要咨询或者学习讨论的,请私信博主或者加QQ群:749492565。博主几乎每天都在。

GimiGimmy 3716

iOS CoreData数据库之增删改查

本文的主要对象是对CoreData数据库及他的创建有一定了解的开发者,如果对CoreData还了解的可以看我上篇博客《iOS CoreData数据库之创建详解》;增(保存数据)单表增加单表对象其实就是在我们的实体对象中只有基本的一些数据类型,没有关联其他自定义类的属性。//单表的添加 -(void)addSigleEntity { //创建一个实体描述--表 NSEntityDesc

tanyufeng_521的专栏 754

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

CoreData用法一:增删改查(Demo讲解)

近阶段想做一款针对自己的理财软件,全部实在本地操作,所以要用到数据库。原来一直都是用FMDB,直接用sql语句,后来看到CoreData挺牛逼的,所以我决定要用CoreData去写这个软件。由于对CoreData了解并不是很多,所以我会抽空闲时间,搞定CoreData.         今天学习了CoreData的简单用法,增删改查。由于是一个Demo所以也没怎么进行封装,就迁就着看,再以后的几

jijunyuan_11109的专栏 1969

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

CoreData数据库

首先第一步 创建 CoreData 工程需要:1. 点击这个在里面添加实体 。 2. 3. 这里需要几个数据 就添加几个字符串 4. 5.切记这里一定要打对勾 6.切记这里要把对号去掉然后创建成功 下面是代码部分 : 运用MVC设计模式 创建Model类继承NSobject 在DataBase.h中: // // DataBase.h // 1607ECoreData // // C...

weixin_43455462的博客 268

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

iOS 让CoreData更简单些

原文:http://www.cocoachina.com/ios/20170421/19096.html 前言 本文并不是CoreData从入门到精通之类的教程, 并不会涉及到过多的原理概念描述, 而是介绍如何让CoreData的使用变得更加简单明了, 方便亲民. 全文约六千字, 预计花费阅读时间15分钟. 目录 这是什么以及如何使用 原理概述 实现细...

abaodc2308的博客 150

CoreData CURD

近阶段想做一款针对自己的理财软件,全部实在本地操作,所以要用到数据库。原来一直都是用FMDB,直接用sql语句,后来看到CoreData挺牛逼的,所以我决定要用CoreData去写这个软件。由于对CoreData了解并不是很多,所以我会抽空闲时间,搞定CoreData.         今天学习了CoreData的简单用法,增删改查。由于是一个Demo所以也没怎么进行封装,就迁就着看,再以后

kingcodexl的专栏 331

用例图建模5步法:从需求失真到业务契约的防御性设计

用例图是UML中连接业务与技术的核心建模工具,其本质并非功能罗列,而是以用户目标为导向的业务价值单元表达。它基于参与者、用例、关系三大要素,遵循‘可观测结果、主动触发、明确目标’的建模原理,直接决定后续类图、活动图与系统架构的合理性。在需求工程实践中,用例图承担着需求过滤、权限界定、流程边界划分等关键技术价值,广泛应用于电商下单、医疗权限控制、SaaS多租户治理及教育身份动态管理等复杂场景。本文聚焦‘用例图建模’与‘5步法’两大热词,提供可落地的防御性建模框架,帮助团队规避参与者漂移、用例颗粒度失衡、包含关

weixin_33857679的博客 450

coreData

请尊重原创的劳动成果:罗朝辉(http://www.cppblog.com/kesalin) http://www.cppblog.com/ipzyh/articles/CoreData.html Entity - NSEntityDescription Entity 相当于数据库中的一个表,它描述一种抽象数据类型,其对应的类为 NSManagedObject 或其子类。 NSEntity...

weixin_30924087的博客 88

CoreData学习记录

分类: IOS2013-11-06 11:53 718人阅读 评论(8) 收藏 举报 objective-centitydescriptorschemasqlite 先来无事,学习了一下CoreData。我对CoreData的理解:CoreData是一个很强大的东西,如果按照层次来划分,他应该处于sqlite之上,应该说位于MVC的model层。有了它,我们可以很自然地和数据库打交道,

u014262299的专栏 515

iOS讲解迷惑之Core Data

一、概念 Core Data相当于封装了sqlite 1.Core Data 是数据持久化存储的最佳方式 2.数据最终的存储类型可以是:SQLite数据库,XML,二进制,内存里,或自定义数据类型 core Data存储的路径格式是URL类型  sqlite 存储的路径格式是 string类型 在Mac OS X 10.5Leopard及以后的版本中,开发

风起云涌的博客 509

iOS CoreData -之删除数据

对CoreData数据的删除

bellazhouyi的专栏 898

coreData的增删改查

#import"ViewController.h" #import"Student.h" @interfaceViewController()<UITableViewDelegate,UITableViewDataSource> { NSManaged...

cheyun1239的博客 188

CoreData-基本数据操作(增删改查)

所有操作都基于Core Data框架相关 API,工程需要添加CoreData.framework支持 1.增  NSEntityDescription insertNewObjectForEntityForName: inManagedObjectContext: 利用NSEntityDescription工厂方法创建Entity 1 2 3

ivolcano的博客 2522

iOS中数据库的增删改查

做iOS开发以来,一直运用的第三方数据库的增删改查,项目多次出现读取数据出现问题,自己也不知道如何查起,后来经过查资料,自己写了几个方法来实现数据的增删改查功能:   首先在TARGETS---》》Build phases里面添加数据库所关联的库文件libsqlite3.tbd 添加完以后,在控制器上添加 #import  且增加属性 {     sqlite3

记忆的恢复 2392
上一篇: iOS-DevicesKeyChain(设备号, UUID, UDID)
下一篇: iOS NSNotificationCenter的简单使用
Micro90
博客等级 码龄12年 12粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值