#pragma mark - Core Data Methods

- (void)insertObjectWithFileName:(NSString *)fileName

{

/**

SQL新增记录的过程

1. 拼接一个INSERT的SQL语句

2. 执行SQL

*/

// 1. 实例化并让context“准备”将一条个人记录增加到数据库

ReaderDocument *document = [NSEntityDescription insertNewObjectForEntityForName:kOAPDFDocumentinManagedObjectContext:self.managedObjectContext];

// 2. 设置个人信息

document.fileName = fileName;

// 3. 保存(让context保存当前的修改)

if ([self.managedObjectContext save:nil]) {

NSLog(@"新增成功");

} else {

NSLog(@"新增失败");

}

}

- (NSMutableArray *)getObjectsWithPredicate:(NSString *)predicate

{

// 1. 实例化一个查询(Fetch)请求

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:kOAPDFDocument];

// 3. 条件查询,通过谓词来实现的

//    request.predicate = [NSPredicate predicateWithFormat:@"age < 60 && name LIKE '*五'"];

// 在谓词中CONTAINS类似于数据库的 LIKE '%王%'

//    request.predicate = [NSPredicate predicateWithFormat:@"phoneNo CONTAINS '1'"];

// 如果要通过key path查询字段,需要使用%K

//    request.predicate = [NSPredicate predicateWithFormat:@"%K CONTAINS '1'", @"phoneNo"];

// 直接查询字表中的条件

// 2. 让_context执行查询数据

NSArray *array = [self.managedObjectContext executeFetchRequest:request error:nil];

//    for (OAPDFDocument *pdf in array) {

//        NSLog(@"\nfielName:%@ \nfilePath:%@ \nfileSize:%@", pdf.fileName, pdf.filePath, pdf.fileSize);

// 在CoreData中,查询是懒加载的

// 在CoreData本身的SQL查询中,是不使用JOIN的,不需要外键

// 这种方式的优点是:内存占用相对较小,但是磁盘读写的频率会较高

//        for (Book *b in p.books) {

//            NSLog(@"%@ %@ %@", b.name, b.price, b.author);

//        }

//    }

//    for (Book *b in array) {

//        NSLog(@"%@ %@ %@", b.name, b.price, b.author);

//    }

return [NSMutableArray arrayWithArray:array];

}

- (void)editObjectsWithPredicate:(NSPredicate *)predicate withState:(NSNumber *)state

{

// 1. 实例化一个查询(Fetch)请求

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:kOAPDFDocument];

// 2. 条件查询,通过谓词来实现的

request.predicate = predicate;

// 在谓词中CONTAINS类似于数据库的 LIKE '%王%'

//    request.predicate = [NSPredicate predicateWithFormat:@"phoneNo CONTAINS '1'"];

// 如果要通过key path查询字段,需要使用%K

//    request.predicate = [NSPredicate predicateWithFormat:@"%K CONTAINS '1'", @"phoneNo"];

// 直接查询字表中的条件

// 3. 让_context执行查询数据

NSArray *array = [self.managedObjectContext executeFetchRequest:request error:nil];

for (ReaderDocument *pdf in array) {

// 3.1修改公文阅读状态

pdf.fileTag = state;

// 3.2修改公文最新打开日期

NSFileManager* fileMngr = [NSFileManager defaultManager];

NSDictionary* attributes = [fileMngr attributesOfItemAtPath:pdf.fileURL error:nil];

pdf.lastOpen = (NSDate *)[attributes objectForKey:NSFileModificationDate];

// 3.3获取并保存,该文件的首页缩略图

UIImage *thumbImage = [pdf imageFromPDFWithDocumentRef:pdf.fileURL];

pdf.thumbImage = UIImagePNGRepresentation(thumbImage);

[self.collectionView reloadData];

break;

}

// 4. 通知_context修改数据是否成功

if ([self.managedObjectContext save:nil]) {

NSLog(@"修改成功");

} else {

NSLog(@"修改失败");

}

}

- (void)removeObjectsWithPredicate:(NSString *)predicate

{

// 1. 实例化查询请求

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:kOAPDFDocument];

// 2. 设置谓词条件

//    request.predicate = [NSPredicate predicateWithFormat:@"name = '张老头'"];

request.predicate = [NSPredicate predicateWithFormat:predicate];

// 3. 由上下文查询数据

NSArray *result = [self.managedObjectContext executeFetchRequest:request error:nil];

// 4. 输出结果

for (ReaderDocument *pdf in result) {

// 删除一条记录

[self.managedObjectContext deleteObject:pdf];

BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:pdf.filePath];

if (fileExists) {

[self removeFileWithName:pdf.fileName];

}else{

NSLog(@"File:%@ is not exist!",pdf.fileName);

}

//        break;

}

// 5. 通知_context保存数据

if ([self.managedObjectContext save:nil]) {

NSLog(@"删除%lu文件成功",(unsigned long)[result count]);

} else {

NSLog(@"删除失败");

}

}

- (void)removeFileWithName:(NSString *)fileName

{

NSFileManager *fileManager = [NSFileManager defaultManager];

NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

NSString *filePath = [documentsPath stringByAppendingPathComponent:fileName];

NSError *error;

BOOL success = [fileManager removeItemAtPath:filePath error:&error];

if (success) {

NSLog(@"Remove fiel:%@ Success!",fileName);

}

else

{

NSLog(@"Could not delete file -:%@ ",[error localizedDescription]);

}

}

转载于:https://www.cnblogs.com/fengmin/p/5015566.html

CoreData 增删改查相关推荐

  1. iOS CoreData (一) 增删改查

    代码地址如下: http://www.demodashi.com/demo/11041.html Core Data是iOS5之后才出现的一个框架,本质上是对SQLite的一个封装,它提供了对象-关系 ...

  2. CoreData里的增删改查

    沿着上篇 https://blog.csdn.net/SwiftIOS_watsUp/article/details/100006664 本篇继续讲CoreData,主要是如何在CoreData里增删 ...

  3. 华山论剑之iOS中(数组,字典,SQLite,CoreData)的“增删改查“

    我们的生活态度就应该是 "不抱怨" ! 其实我想写这篇文章很久了,因为自己做的iOS开发 ,对数据这一块有这极高的要求.所以一些必须的存储数据的使用,我们都有必要熟悉用法.在以前我 ...

  4. 02-CoreData 的增删改查

    CoreData 的增删改查 基本的增删改查的操作 1 数据库的创建 - (void)createDB {// 1.1 创建路径NSURL *modelURL = [[NSBundle mainBun ...

  5. 06-CoreData增删改查

    前言 数据库的操作无非就四个字:增删改查 如何查看CoreData操作数据库的过程? 添加SQL打印 在Edit schemes的Run中添加Arguments:-com.apple.CoreData ...

  6. java map 输入 查询 修改_Mybatis增删改查mapper文件写法详解

    1. 插入 INSERT sql命令(命令里通过#{}获取对象属性) EG: INSERT INTO PRAC_PERSON(p_NAME,P_PASSWORD) VALUES(#{name},#{p ...

  7. resultset mysql_MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)...

    [声明] 欢迎转载,但请保留文章原始出处→_→ [正文] 一.ResultSet接口的介绍: 对数据库的查询操作,一般需要返回查询结果,在程序中,JDBC为我们提供了ResultSet接口来专门处理查 ...

  8. 带头节点单链表的增删改查

    单链表有很多结构循环单链表,有头节点的单链表,无头节点的单链表,双节点单链表,以下源码是以有一个头节点的单链表为例写的增删改查的各种功能,就是下图 然后各个注释也在函数后面写着,这玩意确实还挺难,源码 ...

  9. vs连接mysql建一个表并增删查改_VS连接SQL Server数据库,增删改查详细教程(C#代码)...

    工具: 1.Visual Studio (我使用的是vs2013) 2.SQL Server  (我使用的是sql server2008) 操作: 1.打开SQL Server,打开后会看到数据库的初 ...

  10. MySQL数据库(五)使用pymysql对数据库进行增删改查

    折腾好半天的数据库连接,由于之前未安装 pip ,而且自己用的python 版本为3.6. 只能用 pymysql 来连接数据库,(如果有和我一样未安装 pip 的朋友请 点这里http://blog ...

最新文章

  1. 从字符串中提取BCD码,转换为UINT数据并返回
  2. office excel Query 功能
  3. python selenium unittest_python+selenium+unittest单元测试框架
  4. servlet和jsp页面过滤器Filter的作用及配置
  5. 轻松解决idea一直卡在Resolving Maven dependencies的问题
  6. 大数据技术应用需注意哪些问题
  7. python接口自动化测试框架_Python3+Requests+Excel完整接口自动化测试框架的实现
  8. 流加密,一次性密码本的原理,简介,事例以及攻击方式
  9. Vins-Fusion运行kitti,euroc和tum数据集并使用evo评估
  10. 网易云音乐虚化图片html,CSS之高斯模糊—(网易云歌单)
  11. 浅谈手游的数据分析与精细化运营的重要性
  12. 2019-2020记罗振宇“时间的朋友”跨年演讲(二)
  13. php java 私钥 转换格式,php公钥私钥 3 ---非标准格式转换为标准格式
  14. 1114 计算营业额
  15. 不让用计算机怎么回怼,当别人怼你时,如何优雅地怼回去
  16. 单片机c语言中sbuf的定义,SBUF的详细介绍!(51单片机)
  17. Linux打印命令lp详解
  18. Windows VScode Linter pylint is not installed
  19. Mac技巧合集第一期
  20. echarts可视化市级地图详细版(vue+element)

热门文章

  1. Hibernate学习(一)创建数据表
  2. 李洪强iOS开发之XMPP
  3. python vimrc的安装,并用pep8检测python代码
  4. delphi三层架构中注册服务器
  5. 前端开发中一些常用技巧总结
  6. 怎么用matlab赋值圆孔,【求助】求一个MATLAB的杨氏双孔干涉程序(要圆孔) - 物理 - 小木虫 - 学术 科研 互动社区...
  7. 拉取远程分支到本地分支_想买的保险本地没有分支机构怎么办?异地投保理赔难吗?...
  8. Redis 6.0 源码阅读笔记(9) -- 数据淘汰原理
  9. Dubbo本地伪装 Mock
  10. databinding include 控件空指针_Android Jetpack系列——细说DataBinding