04-CoreData Stack技术栈堆手动实现
2016-07-11 17:16
274 查看
前言
根据上一小节CoreDataStack的架构图,我们逐一来创建所需要的核心组件来搭建我们使用CoreData的环境学习这一小节,我们已经不需要勾选Use CoreDtat选项来让系统帮助我们完成这一步骤
1.1-创建NSManagedObjectModel
//懒加载managedObjectModel - (NSManagedObjectModel *)managedObjectModel { if (_managedObjectModel != nil) { return _managedObjectModel; } // //根据某个模型文件路径创建模型文件 // _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:[[NSBundle mainBundle]URLForResource:@"Person" withExtension:@"momd"]]; //合并Bundle所有.momd文件 //budles: 指定为nil,自动从mainBundle里找所有.momd文件 _managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil]; return _managedObjectModel; }
1.2-创建NSPersistentStoreCoordinator
//懒加载persistentStoreCoordinator -(NSPersistentStoreCoordinator*)persistentStoreCoordinator { if (_persistentStoreCoordinator != nil) { return _persistentStoreCoordinator; } //根据模型文件创建存储调度器 _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:self.managedObjectModel]; /** * 给存储调度器添加存储器 * * tyep:存储类型 * configuration:配置信息 一般为nil * options:属性信息 一般为nil * URL:存储文件路径 */ NSURL *url = [[self getDocumentsUrl] URLByAppendingPathComponent:@"person.db" isDirectory:YES]; [_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:nil]; return _persistentStoreCoordinator; }
1.3-创建NSManagedObjectContext
//懒加载managedObjectContext -(NSManagedObjectContext*)managedObjectContext { if (_managedObjectContext != nil) { return _managedObjectContext; } //参数表示线程类型 NSPrivateQueueConcurrencyType比NSMainQueueConcurrencyType略有延迟 _managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]; //设置存储调度器 [_managedObjectContext setPersistentStoreCoordinator:self.persistentStoreCoordinator]; return _managedObjectContext; }
1.4-在实际开发中的封装
实际开发中,我们搭建CoreData使用环境的代码是可以复用的,我们可以创建一个工具类来管理.h文件
#import <Foundation/Foundation.h> #import <CoreData/CoreData.h> @interface ZXKCoreDataManagedContext : NSObject #define kManagedObjectContext [ZXKCoreDataManagedContext shareManagedContext] //单例实现 +(instancetype)shareManagedContext; //保存 -(void)save; //管理模型文件上下文 @property(nonatomic,strong)NSManagedObjectContext *managedObjectContext; //模型文件 @property(nonatomic,strong)NSManagedObjectModel *managedObjectModel; //存储调度器 @property(nonatomic,strong)NSPersistentStoreCoordinator *persistentStoreCoordinator; @end
.m文件
#import "ZXKCoreDataManagedContext.h"
@implementation ZXKCoreDataManagedContext
+(instancetype)shareManagedContext
{
static ZXKCoreDataManagedContext *manager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
manager = [[ZXKCoreDataManagedContext alloc] init];
});
return manager;
}
//获取沙盒路径URL
-(NSURL*)getDocumentsUrl
{
return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] firstObject];
}
//懒加载managedObjectModel - (NSManagedObjectModel *)managedObjectModel { if (_managedObjectModel != nil) { return _managedObjectModel; } // //根据某个模型文件路径创建模型文件 // _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:[[NSBundle mainBundle]URLForResource:@"Person" withExtension:@"momd"]]; //合并Bundle所有.momd文件 //budles: 指定为nil,自动从mainBundle里找所有.momd文件 _managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil]; return _managedObjectModel; }//懒加载persistentStoreCoordinator -(NSPersistentStoreCoordinator*)persistentStoreCoordinator { if (_persistentStoreCoordinator != nil) { return _persistentStoreCoordinator; } //根据模型文件创建存储调度器 _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:self.managedObjectModel]; /** * 给存储调度器添加存储器 * * tyep:存储类型 * configuration:配置信息 一般为nil * options:属性信息 一般为nil * URL:存储文件路径 */ NSURL *url = [[self getDocumentsUrl] URLByAppendingPathComponent:@"person.db" isDirectory:YES]; [_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:nil]; return _persistentStoreCoordinator; }//懒加载managedObjectContext -(NSManagedObjectContext*)managedObjectContext { if (_managedObjectContext != nil) { return _managedObjectContext; } //参数表示线程类型 NSPrivateQueueConcurrencyType比NSMainQueueConcurrencyType略有延迟 _managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]; //设置存储调度器 [_managedObjectContext setPersistentStoreCoordinator:self.persistentStoreCoordinator]; return _managedObjectContext; }
//保存数据库
-(void)save
{
[self.managedObjectContext save:nil];
}
@end
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 数据库链接字符串查询网站
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- DB2实例管理
- DB2实例管理
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 保障MySQL数据安全的14个最佳方法
- mysql问答汇集
- 第三章 数据库备份和还原
- 创建一个空的IBM DB2 ECO数据库的方法
- Access 2000 数据库 80 万记录通用快速分页类
- 开通一个数据库失败的原因的和解决办法
- 一个简单的asp数据库操作类
- CentOS下DB2数据库安装过程详解