11-使用NSPersistentContainer搭建CoreData Stack

  • 在应用的开发中,一般我们只需要搭建一个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];


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值