(1)创建一个Data Model文件,命名为MyModel.xcdatamodeld
(2)创建Users表,添加如图的字段
(3)创建NSManagedObject subclass表实体文件
(4)在Users.m文件中,覆写description方法
CoreDataDBHelper.h
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
// 本地文件存储的路径
#define PATH [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/sqlite.db"]
#define MODEL_NAME @"MyModel"
@interface CoreDataDBHelper : NSObject
{
// 1.数据模型对象
NSManagedObjectModel *_managedObjectModel;
// 2.创建本地持久文件对象
NSPersistentStoreCoordinator *_persistentStoreCoordinator;
// 3.管理数据对象
NSManagedObjectContext *_managedObjectContext;
}
// 设计成单例模式
+ (CoreDataDBHelper *)shareCoreDataDBHelper;
// 添加数据的方法
- (BOOL)insertDataWithModelName:(NSString *)modelName
setAttributWithDic:(NSDictionary *)params;
// 查看
/*
modelName :实体对象类的名字
predicateString :谓词条件
identifers :排序字段集合
ascending :是否升序
*/
- (NSArray *)selectDataWithModelName:(NSString *)modelName
predicateString:(NSString *)predicateString
sort:(NSArray *)identifers
ascending:(BOOL)ascending;
// 修改
- (BOOL)updateDataWithModelName:(NSString *)modelName
predicateString:(NSString *)predicateString
setAttributWithDic:(NSDictionary *)params;
// 删除
- (BOOL)deleteDataWithModelName:(NSString *)modelName
predicateString:(NSString *)predicateString;
@end
CoreDataDBHelper.m
#import "CoreDataDBHelper.h"
@implementation CoreDataDBHelper
- (instancetype)init
{
self = [super init];
if (self)
{
// 1.数据模型对象
NSURL *modelUrl = [[NSBundle mainBundle] URLForResource:MODEL_NAME withExtension:@"momd"];
_managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelUrl];
// 2.创建本地持久文件对象
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:_managedObjectModel];
// 设置本地数据的保存位置
NSURL *fileUrl = [NSURL fileURLWithPath:PATH];
[_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:fileUrl options:nil error:nil];
// 3.管理数据对象
_managedObjectContext = [[NSManagedObjectContext alloc] init];
[_managedObjectContext setPersistentStoreCoordinator:_persistentStoreCoordinator];
}
return self;
}
// 设计成单例模式
+ (CoreDataDBHelper *)shareCoreDataDBHelper
{
static CoreDataDBHelper *coreDataDBHelper = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
coreDataDBHelper = [[CoreDataDBHelper alloc] init];
});
return coreDataDBHelper;
}
// 添加数据的方法
/*
params : @{
@"name":@"张三",
@"age":@20
}
*/
- (BOOL)insertDataWithModelName:(NSString *)modelName
setAttributWithDic:(NSDictionary *)params
{
NSEntityDescription *entity = [NSEntityDescription insertNewObjectForEntityForName:modelName inManagedObjectContext:_managedObjectContext];
// 遍历参数字典
for (NSString *key in params)
{
SEL selector = [self selWithKeyName:key];
if ([entity respondsToSelector:selector])
{
[entity performSelector:selector withObject:params[key]];
}
}
[_managedObjectContext insertObject:entity];
// 保存到本地
return [_managedObjectContext save:nil];
}
// 查看
/*
modelName :实体对象类的名字
predicateString :谓词条件
identifers :排序字段集合
ascending :是否升序
*/
- (NSArray *)selectDataWithModelName:(NSString *)modelName
predicateString:(NSString *)predicateString
sort:(NSArray *)identifers
ascending:(BOOL)ascending
{
// 1.创建实体对象
NSEntityDescription *entity = [NSEntityDescription entityForName:modelName inManagedObjectContext:_managedObjectContext];
// 2.创建一个查询对象
NSFetchRequest *request = [[NSFetchRequest alloc] init];
// 告诉查询对象你要查询的数据类型
[request setEntity:entity];
// 添加查询条件
if (predicateString != nil || [predicateString isEqualToString:@""])
{
NSPredicate *predicate = [NSPredicate predicateWithFormat:predicateString];
[request setPredicate:predicate];
}
// 3.设置排序
NSMutableArray *sortDescriptors = [NSMutableArray array];
for (NSString *identifer in identifers)
{
// 创建排序对象
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:identifer ascending:ascending];
// 把排序对象添加到数组中
[sortDescriptors addObject:sortDescriptor];
}
// 把排序对象设置到查询对象里面
[request setSortDescriptors:sortDescriptors];
// 3.开始查询
return [_managedObjectContext executeFetchRequest:request error:nil];
}
// 修改
- (BOOL)updateDataWithModelName:(NSString *)modelName
predicateString:(NSString *)predicateString
setAttributWithDic:(NSDictionary *)params
{
// 获取所有需要修改实体对象
NSArray *entitys = [self selectDataWithModelName:modelName predicateString:predicateString sort:nil ascending:NO];
// 遍历所有的实体对象
for (NSEntityDescription *entity in entitys)
{
// 修改对象的属性
for (NSString *key in params)
{
SEL selector = [self selWithKeyName:key];
if ([entity respondsToSelector:selector])
{
[entity performSelector:selector withObject:params[key]];
}
}
}
return [_managedObjectContext save:nil];
}
// 删除
- (BOOL)deleteDataWithModelName:(NSString *)modelName
predicateString:(NSString *)predicateString
{
// 获取所有需要修改实体对象
NSArray *entitys = [self selectDataWithModelName:modelName predicateString:predicateString sort:nil ascending:NO];
// 遍历所有的实体对象
for (NSEntityDescription *entity in entitys)
{
// 删除对象
[_managedObjectContext deleteObject:entity];
}
return [_managedObjectContext save:nil];
}
// 通过一个字符串反回一个set方法
- (SEL)selWithKeyName:(NSString *)keyName
{
NSString *first = [[keyName substringToIndex:1] uppercaseString];
NSString *end = [keyName substringFromIndex:1];
NSString *selString = [NSString stringWithFormat:@"set%@%@:",first,end];
return NSSelectorFromString(selString);
}
@end
- (NSString *)description
{
return [NSString stringWithFormat:@"id:%@,name:%@,age;%@",self.userId,self.userName,self.age];
}