自己写简单CoreDataManager封装对CoreData操作
关于CoreData的介绍太多,网上一搜大把全是,这里不介绍CoreData,直接上代码,注释写的很详细,应该很容易理解,暂时现做简单的增删该查,后面有时间再做修改完善。
CoreDataManager.h
//
// CoreDataManager.h
// UCaiYuan
//
// Created by wanyakun on 16/1/6.
// Copyright © 2016年 com.ucaiyuan. All rights reserved.
// #import <Foundation/Foundation.h> @interface CoreDataManager : NSObject +(CoreDataManager *)defaultManager; /**
* 插入单条数据到Entity
*
* @param entity 实体字典
* @param name Entity名称
*/
- (BOOL)insertCoreDataWithEntity:(NSDictionary *)entity name:(NSString *)name; /**
* 根据查询条件从实体中查询数据
*
* @param entityName Entity名称
* @param predicate 查询条件
*
* @return 字典数组
*/
- (NSMutableArray *)selectCoreDataFromName:(NSString *)name predicate:(NSString *)predicate; /**
* 更新单条数据到Entity
*
* @param entity 更新内容
* @param name Entity名字
* @param predicate 更新条件
*
* @return 是否更新成功
*/
- (BOOL)updateCoreDataWithEntity:(NSDictionary *)entity name:(NSString *)name predicate:(NSString *)predicate; /**
* 从Entity中删除数据
*
* @param entity 更新内容
* @param name Entity名字
* @param predicate 更新条件
*
* @return 是否删除成功
*/
- (BOOL)deleteCoreDataWithName:(NSString *)name predicate:(NSString *)predicate; @end
CoreDataManager.m
//
// CoreDataManager.m
// UCaiYuan
//
// Created by wanyakun on 16/1/6.
// Copyright © 2016年 com.ucaiyuan. All rights reserved.
// #import "CoreDataManager.h" @interface CoreDataManager ()
/**
* 负责应用和数据直接的交互CRUD
*/
@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;
/**
* 添加持久化存储库(比如SQLite数据库)
*/
@property (strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;
/**
* 代表CoreData模型文件
*/
@property (strong, nonatomic) NSManagedObjectModel *managedObjectModel;
@end @implementation CoreDataManager #pragma mark - 单例
+(CoreDataManager *)defaultManager {
static dispatch_once_t predicate;
static CoreDataManager * defaultManager;
dispatch_once(&predicate, ^{
defaultManager=[[CoreDataManager alloc] init];
});
return defaultManager;
} #pragma mark - public method
/**
* 插入单条数据到Entity
*
* @param entity 实体字典
* @param name Entity名称
*/
- (BOOL)insertCoreDataWithEntity:(NSDictionary *)entity name:(NSString *)name
{
NSManagedObject *object = [NSEntityDescription insertNewObjectForEntityForName:name inManagedObjectContext:self.managedObjectContext];
[object setValuesForKeysWithDictionary:entity];
// 利用上下文对象,将数据同步到持久化存储库
NSError *error = nil;
BOOL success = [self.managedObjectContext save:&error];
if (!success) {
NSLog(@"保存数据到数据库错误:%@",[error localizedDescription]);
return NO;
}
return YES;
} /**
* 根据查询条件从实体中查询数据
*
* @param entityName Entity名称
* @param predicate 查询条件
*
* @return 字典数组
*/
- (NSMutableArray *)selectCoreDataFromName:(NSString *)name predicate:(NSString *)predicate
{
NSFetchRequest *request = [[NSFetchRequest alloc] init]; NSEntityDescription *entity = [NSEntityDescription entityForName:name inManagedObjectContext:self.managedObjectContext];
request.entity = entity; if (predicate) {
NSPredicate *predicateObject = [NSPredicate predicateWithFormat:predicate];
request.predicate = predicateObject;
} NSError *error;
NSArray *fetchedObjects = [self.managedObjectContext executeFetchRequest:request error:&error];
NSMutableArray *resultArray = [NSMutableArray array]; for (NSManagedObject *object in fetchedObjects) {
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
for (NSPropertyDescription *property in entity.properties) {
NSString *key = property.name;
id value = [object valueForKey:key];
[dict setValue:value forKey:key];
}
[resultArray addObject:dict];
}
return resultArray;
} /**
* 更新单条数据到Entity
*
* @param entity 更新内容
* @param name Entity名字
* @param predicate 更新条件
*
* @return 是否更新成功
*/
- (BOOL)updateCoreDataWithEntity:(NSDictionary *)entity name:(NSString *)name predicate:(NSString *)predicate
{
NSFetchRequest *request = [[NSFetchRequest alloc] init]; NSEntityDescription *entityDescription = [NSEntityDescription entityForName:name inManagedObjectContext:self.managedObjectContext];
request.entity = entityDescription; if (predicate) {
NSPredicate *predicateObject = [NSPredicate predicateWithFormat:predicate];
request.predicate = predicateObject;
} NSError *error;
NSArray *fetchedObjects = [self.managedObjectContext executeFetchRequest:request error:&error]; for (NSManagedObject *object in fetchedObjects) {
[object setValuesForKeysWithDictionary:entity];
} BOOL success = [self.managedObjectContext save:&error];
if (!success) {
NSLog(@"更新数据到数据库错误:%@",[error localizedDescription]);
return NO;
}
return YES;
} /**
* 从Entity中删除数据
*
* @param entity 更新内容
* @param name Entity名字
* @param predicate 更新条件
*
* @return 是否删除成功
*/
- (BOOL)deleteCoreDataWithName:(NSString *)name predicate:(NSString *)predicate
{
NSFetchRequest *request = [[NSFetchRequest alloc] init]; NSEntityDescription *entityDescription = [NSEntityDescription entityForName:name inManagedObjectContext:self.managedObjectContext];
request.entity = entityDescription; if (predicate) {
NSPredicate *predicateObject = [NSPredicate predicateWithFormat:predicate];
request.predicate = predicateObject;
} NSError *error;
NSArray *fetchedObjects = [self.managedObjectContext executeFetchRequest:request error:&error]; for (NSManagedObject *object in fetchedObjects) {
[self.managedObjectContext deleteObject:object];
} BOOL success = [self.managedObjectContext save:&error];
if (!success) {
NSLog(@"删除数据出错:error:%@",error);
return NO;
}
return YES;
} #pragma mark - private method
//获取Documents路径
- (NSURL *)applicationDocumentsDirectory
{
return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
} - (NSString *)bundleName
{
return [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleName"];
} #pragma mark - getter setter
- (NSManagedObjectContext *)managedObjectContext
{
if (_managedObjectContext == nil) {
_managedObjectContext = [[NSManagedObjectContext alloc] init];
_managedObjectContext.persistentStoreCoordinator = [self persistentStoreCoordinator];
}
return _managedObjectContext;
} - (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (_persistentStoreCoordinator == nil) {
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:self.managedObjectModel]; NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:[self bundleName]];
NSError *error = nil;
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
}
return _persistentStoreCoordinator;
} - (NSManagedObjectModel *)managedObjectModel
{
if (_managedObjectModel == nil) {
_managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
}
return _managedObjectModel;
} @end
自己写简单CoreDataManager封装对CoreData操作的更多相关文章
- 自己封装的poi操作Excel工具类
自己封装的poi操作Excel工具类 在上一篇文章<使用poi读写Excel>中分享了一下poi操作Excel的简单示例,这次要分享一下我封装的一个Excel操作的工具类. 该工具类主要完 ...
- [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例)
[分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例) 踏雁寻花 发表于 2015-8-23 23:31:28 https://www.itsk.com/thread-35 ...
- 对bootstrap modal的简单扩展封装
对bootstrap modal的简单扩展封装 参考自:http://www.muzilei.com/archives/677 注:原文不支持bootstrap新版本,并且居中等存在问题 此段时间 ...
- 使用MVC写模式jsp连接到数据库操作
首先用一个JavaBean封装数据库操作,即mvc中的模型 JdbcBean.java package data; import java.sql.*; public class JdbcBean { ...
- 一个用python简单的封装了aria2的jsonrpc中adduri的脚本
aria2是一个十分牛逼的下载神器,有时候项目需要一个很牛逼的下载中间件的话,aria2是一个不错的选择.其中支持jsonrpc和websocket的特性尤其诱人.但是python用起来还是有点不爽, ...
- React+Echarts简单的封装套路
今天我们来介绍一下React中,对Echarts的一个简单的封装. 首先在我们的React项目中,想使用Echart包,首先需要先安装它,安装代码如下,任选一个就可以 cnpm install ech ...
- python3.6 使用 pymysql 连接 Mysql 数据库及 简单的增删改查操作
1.通过 pip 安装 pymysql 进入 cmd 输入 pip install pymysql 回车等待安装完成: 安装完成后出现如图相关信息,表示安装成功. 2.测试连接 import ...
- 如何更简单方便地执行SQL操作?
现在公司使用mybatis作为DAL层的框架. 使用起来比较简单,使用xml进行SQL的书写,java代码使用接口执行. 但在写一些简单SQL的时候会显得非常繁琐: xml和java分离(设计上为了解 ...
- Redis入门很简单之六【Jedis常见操作】
Redis入门很简单之六[Jedis常见操作] http://www.tuicool.com/articles/vaqABb http://www.cnblogs.com/stephen-liu74/ ...
随机推荐
- delphi中表示跳出的有break,continue, exit,abort, halt, runerror
1.break 强制退出循环(只能放在循环中),用于从For语句,while语句或repeat语句中强制退出. 2.continue 用于从For语句,while语句或repeat语句强行结束本次 ...
- [转]Openwrt的Inittab
转来一篇关于启动的文章,特意收藏.http://see.sl088.com/wiki/Inittab 文件位于/etc/inittab编辑方法vi /etc/inittab初始内容::sysinit: ...
- C# 添加一个用户对文件或者文件夹的所有权限
private void ModifyFilePermission(string path, string user, FileType filetype) { if (filetype == Fil ...
- Unix 编程
1. Users and Groups 真实用户ID和真实组ID 真实用户ID和组ID表示运行进程的真实用户 ID 和 组ID. 有效用户ID和有效组IDp 有效 ID 是进程进行相关操作(比如系统调 ...
- Oracle ClusterwarePRCT-1011 : Failed to run "oifcfg".&nb
OS: Oracle Linux Server release 6.3 DB: Oracle 11.2.0.3 在oracle-linux6.3安装11g RAC,在安装软件时候提示: An inte ...
- 详谈 oracle 索引 (笔记)
1.oracle索引空值问题 当在有空值得列上建立单列索引时,如果搜索条件为 is null 在解释计划中可以看到,对于此列oracle并没有使用索引查询: 但是当建立的是多列索引是,就会按照索引来进 ...
- 说明一下JNI 与AIDL
代码在评论中. JNI: 为什么需要JNI: 因为android是由[JAVA & C/C++]组成.Java运行在Dalvik虚拟机中. 没有办法直接访问底层硬件.底层HW相关目前技术一般都 ...
- 使用VMDepot镜像快速部署CKAN开放数据门户
最新发布的CKAN VMDepot镜像针对中国用户强化了中文支持,提升了与MS Office办公软件的互操作性,并集成了常用插件和最佳实践配置参数. 使得CKAN原本十分复杂繁琐的部署流程变得非常简单 ...
- jquery一个控件绑定多个事件
jQuery("#id").bind("click mouseover",function(){}) // 两个事件中间有空格 $("p" ...
- 在linux上使用yum安装JDK
1.查找java相关得列表 [qyf@localhost ~]$ yum -y list java* 执行结果 [qyf@localhost ~]$ yum -y list java* Loaded ...