在应用的开发中,一般我们只需要搭建一个CoreData Stack就可以了,并且一个标准的CoreData Stack是可以复用的。所以这里面我们可以封装成一个单利的工具类
HMCoreDataManager.h
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
#define kHMCoreDataManager [HMCoreDataManager shareInstance]
@interface HMCoreDataManager : NSObject
//单利类
+(HMCoreDataManager*)shareInstance;
/**
CoreData Stack容器
内部包含:
管理对象上下文:NSManagedObjectContext *viewContext;
对象管理模型:NSManagedObjectModel *managedObjectModel
存储调度器:NSPersistentStoreCoordinator *persistentStoreCoordinator;
*/
@property(nonatomic,strong)NSPersistentContainer *persistentContainer;
//保存到数据库
- (void)save;
@end
- HMCoreDataManager.m
#import "HMCoreDataManager.h"
@implementation HMCoreDataManager
+ (HMCoreDataManager *)shareInstance
{
static HMCoreDataManager *manager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
manager = [[HMCoreDataManager alloc] init];
});
return manager;
}
//懒加载NSPersistentContainer
- (NSPersistentContainer *)persistentContainer
{
if(_persistentContainer != nil)
{
return _persistentContainer;
}
//1.创建对象管理模型
// //根据某个模型文件路径创建模型文件
// NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:[[NSBundle mainBundle]URLForResource:@"Person" withExtension:@"momd"]];
//合并Bundle所有.momd文件
//budles: 指定为nil,自动从mainBundle里找所有.momd文件
NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];
//2.创建NSPersistentContainer
/**
* name:数据库文件名称
*/
_persistentContainer = [[NSPersistentContainer alloc] initWithName:@"sql.db" managedObjectModel:model];
//3.加载存储器
[_persistentContainer loadPersistentStoresWithCompletionHandler:^(NSPersistentStoreDescription * description, NSError * error) {
NSLog(@"%@",description);
NSLog(@"%@",error);
}];
return _persistentContainer;
}
- (void)save
{
NSError *error = nil;
[self.persistentContainer.viewContext save:&error];
if (error == nil) {
NSLog(@"保存到数据库成功");
}
else
{
NSLog(@"保存到数据库失败:%@",error);
}
}
@end
- 使用
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
//创建CoreData模型
Person *person = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:context1];
//赋值
person.name = @"坤哥";
person.age = 18;
//保存到数据库
[kHMCoreDataManager save];
}
- 关于数据库的增删改查操作可以参考我的这篇博客http://blog.csdn.net/u013263917/article/details/51882611