04-CoreData Stack技术栈堆手动实现
来源:互联网 发布:梦想与现实 知乎 编辑:程序博客网 时间:2024/05/21 22:51
前言
根据上一小节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
0 0
- 04-CoreData Stack技术栈堆手动实现
- stack overflow 堆 栈
- heap(堆) stack(栈)
- stack(栈堆)
- 【算法导论】手动实现堆
- Heap And Stack 堆 栈
- 栈(stack)与堆(heap)
- 栈(stack)与堆(heap)
- 堆(heap)和栈(stack)
- 堆(heap)和栈(stack)
- heap(堆) 与 stack(栈)
- heap(堆) 和 stack(栈)
- 堆(heap)和栈(stack)
- 栈(stack)与堆(heap)
- heap(堆) 和 stack(栈)
- 堆(heap)和栈(stack)
- 堆(heap)和栈(stack)
- 堆(heap)和栈(stack)
- iOS webView与H5的交互(返回页面的处理)
- 路由改过会恢复默认值
- [DCT]MT6589 DCT配置GPIO的设置/初始化/编译
- 字符串 格式对齐
- 加载tomcat下的属性文件
- 04-CoreData Stack技术栈堆手动实现
- LeetCode:Merge Two Sorted Lists
- spring context标签
- 互联网自由工作者如何提高工作效率?
- fir.im Weekly - 如何写出零 bug 的代码
- pppcloud云主机内LINUX用户安全管理1
- 采用FLAG_ACTIVITY_CLEAR_TOP退出整个程序(多activity)
- 复习(数据结构):动态数组:c++_stl写法
- 动态链接库和静态链接库的区别