关于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操作的更多相关文章

  1. 自己封装的poi操作Excel工具类

    自己封装的poi操作Excel工具类 在上一篇文章<使用poi读写Excel>中分享了一下poi操作Excel的简单示例,这次要分享一下我封装的一个Excel操作的工具类. 该工具类主要完 ...

  2. [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例)

    [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例) 踏雁寻花 发表于 2015-8-23 23:31:28 https://www.itsk.com/thread-35 ...

  3. 对bootstrap modal的简单扩展封装

    对bootstrap modal的简单扩展封装 参考自:http://www.muzilei.com/archives/677   注:原文不支持bootstrap新版本,并且居中等存在问题 此段时间 ...

  4. 使用MVC写模式jsp连接到数据库操作

    首先用一个JavaBean封装数据库操作,即mvc中的模型 JdbcBean.java package data; import java.sql.*; public class JdbcBean { ...

  5. 一个用python简单的封装了aria2的jsonrpc中adduri的脚本

    aria2是一个十分牛逼的下载神器,有时候项目需要一个很牛逼的下载中间件的话,aria2是一个不错的选择.其中支持jsonrpc和websocket的特性尤其诱人.但是python用起来还是有点不爽, ...

  6. React+Echarts简单的封装套路

    今天我们来介绍一下React中,对Echarts的一个简单的封装. 首先在我们的React项目中,想使用Echart包,首先需要先安装它,安装代码如下,任选一个就可以 cnpm install ech ...

  7. python3.6 使用 pymysql 连接 Mysql 数据库及 简单的增删改查操作

    1.通过 pip 安装 pymysql 进入 cmd  输入  pip install pymysql   回车等待安装完成: 安装完成后出现如图相关信息,表示安装成功. 2.测试连接 import ...

  8. 如何更简单方便地执行SQL操作?

    现在公司使用mybatis作为DAL层的框架. 使用起来比较简单,使用xml进行SQL的书写,java代码使用接口执行. 但在写一些简单SQL的时候会显得非常繁琐: xml和java分离(设计上为了解 ...

  9. Redis入门很简单之六【Jedis常见操作】

    Redis入门很简单之六[Jedis常见操作] http://www.tuicool.com/articles/vaqABb http://www.cnblogs.com/stephen-liu74/ ...

随机推荐

  1. 关于Raw,Assets的使用

    Raw,Assets下文件区别: 相同点:两个目录下的文件在打包后都会原封不动的保存到apk中,不会被编译成二进制. 不同点:Raw下文件不能使用目录结构, 有些格式的会被压缩,能够通过R.raw方便 ...

  2. webpack 学习笔记 01 使用webpack的原因

    本系列文章实际上就是官网文档的翻译加上自己实践过程中的理解. 伴随着websites演化至web apps的过程,有三个现象是很明显的: 页面中有越来越多的Js. 客户端能做的事情越来越多. 越来越少 ...

  3. POJ 2960 S-Nim<博弈>

    链接:http://poj.org/problem?id=2960 #include<stdio.h> #include<string.h> ; ; int SG[N];//S ...

  4. 菜鸟学习Spring——60s配置XML方法实现简单AOP

    一.概述. 上一篇博客讲述了用注解的形式实现AOP现在讲述另外一种AOP实现的方式利用XML来实现AOP. 二.代码演示. 准备工作参照上一篇博客<菜鸟学习Spring--60s使用annota ...

  5. 使用 libevent 和 libev 提高网络应用性能——I/O模型演进变化史

    构建现代的服务器应用程序需要以某种方法同时接收数百.数千甚至数万个事件,无论它们是内部请求还是网络连接,都要有效地处理它们的操作. 有许多解决方案,但事件驱动也被广泛应用到网络编程中.并大规模部署在高 ...

  6. Java求职面试准备之常见算法

    最近在求职面试,整理一下常见面试算法: 对TestAlgorithms.java中方法的测试见JunitTestAlgorithms.java(引入了junit4) 1.TestAlgorithms. ...

  7. OpenStack:安装Neutron与provider network

    1. 安装(1)Install Networking services on a dedicated network node# apt-get install neutron-server neut ...

  8. golang反射初试

    golang反射来自Go AST(Abstract Syntax Tree). reflect操作更多像traverse AST. t := reflect.TypeOf(obj) 使用TypeOf( ...

  9. iOS学习之UI可视化编程-StoryBoard

    一.StoryBoard与xib 对比: 相同点:都属于IB编程的方式,可以快速构建GUI. 不同点:xib侧重于单文件(单独的控制器或者视图)编辑,storyboard侧重于多页面关联.storyb ...

  10. C#语法功能结构

    1.File打开指定文件夹或者文件,"\"为转义字符System.Diagnostics.Process.Start(Application.StartupPath + " ...