关于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. DataTable使用总结

    1.DataTable数据去重 static void Main(string[] args) { DataTable dt = new DataTable();//创建表 DataColumn dc ...

  2. eval和new Function的区别

    eval和new Function都可以动态解析和执行字符串.但是它们对解析内容的运行环境判定不同. var a = 'global scope' function b(){ var a = 'loc ...

  3. C++中int *p[4]和 int (*q)[4]的区别

    这俩兄弟长得实在太像,以至于经常让人混淆.然而细心领会和甄别就会发现它们大有不同. 前者是指针数组,后者是指向数组的指针.更详细地说. 前: 指针数组;是一个元素全为指针的数组.后: 数组指针;可以直 ...

  4. hdu 2141 Can you find it?

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2141 Can you find it? Description Give you three sequ ...

  5. c++大数模板

    自己写的大数模板,参考了小白书上的写法,只是实现了加减乘法,不支持负数,浮点数.. 除法还没写o(╯□╰)o以后再慢慢更吧.. 其实除法我用(xie)的(bu)少(lai),乘法写过fft,这模板还是 ...

  6. JavaScript AJAX stream 流式显示

      当使用AJAX进行信息交互的时候,如果服务器返回的信息比较大,那么相对于传送完成之后的统一显示,流式显示就比较友好了. 流式实现 原理就是设置定时器,定时的查看AJAX对象的状态并更新内容,如果传 ...

  7. ASP运行流程(主要的类笔记)

    个人笔记:参考汤姆大叔的MVC之前那些事系列整理  client端发送页面请求,被IIS的某个进程截获,它根据申请的页面后缀(.aspx)不同,调用不同的页面处理程序(.asp->asp.dll ...

  8. Android编程: 调试方法

    学习知识:Android的调试方法 ====调试方法==== 前提: IDE环境为Android Studio,熟悉LogCat,知道如何查看日志信息 工具: Android DDMS调试工具,一般点 ...

  9. DHCP Server软件使用教程

    DHCP Server软件使用教程 前提网络环境配置 电脑连接上wifi 网络和共享中心中更改适配器,共享无线网卡给以太网网卡 手动设置以太网网卡ipv4地址为192.168.1.1,子网掩码为255 ...

  10. linux 简单的DMA例程

    一个简单的使用DMA 例子 示例:下面是一个简单的使用DMA进行传输的驱动程序,它是一个假想的设备,只列出DMA相关的部分来说明驱动程序中如何使用DMA的. 函数dad_transfer是设置DMA对 ...