11-使用NSPersistentContainer搭建CoreData Stack

来源:互联网 发布:为什么胡歌没女友 知乎 编辑:程序博客网 时间:2024/06/05 10:24
  • 在应用的开发中,一般我们只需要搭建一个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
0 0
原创粉丝点击