博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于Core Data的一些整理(三)
阅读量:6293 次
发布时间:2019-06-22

本文共 2618 字,大约阅读时间需要 8 分钟。

关于Core Data的一些整理(三)

关于Core Data Stack的四种类与它们的关系如下:

  •  NSManagedObjectModel
  •  NSPersistentStore
  •  NSPersistentStoreCoordinator 
  •  NSManagedObjectContext

 

 

手写Core Data Stack,新建文件继承NSObject,并且在其中要依次初始化三个对象:NSManagedObjectContextNSPersistentStoreCoordinatorNSManagedObjectModel,具体代码实现如下:

1 //  CoreDataStack.h 2  3 #import 
4 #import
5 6 @interface CoreDataStack : NSObject 7 8 @property (nonatomic, strong) NSManagedObjectContext *context; 9 10 - (void)saveContext;11 12 @end13 14 // CoreDataStack.m15 16 #import "CoreDataStack.h"17 18 @interface CoreDataStack ()19 20 @property (nonatomic, strong) NSPersistentStoreCoordinator *psc;21 @property (nonatomic, strong) NSManagedObjectModel *managedObjectModel;22 23 @end24 25 @implementation CoreDataStack26 27 @synthesize managedObjectModel = _managedObjectModel;28 29 - (void)saveContext {30 if (_context) {31 NSError *error = nil;32 if ([_context hasChanges] && [_context save:&error]) {33 NSLog(@"%@", error.localizedDescription);34 abort();35 }36 }37 }38 39 - (NSURL *)applicationDocumentsDirectory {40 NSArray *array = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask];41 return array.lastObject;42 }43 44 - (NSManagedObjectContext *)context {45 if (_context) {46 return _context;47 }48 _context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];49 [_context setPersistentStoreCoordinator:[self psc]];50 return _context;51 }52 53 - (NSPersistentStoreCoordinator *)psc {54 if (_psc) {55 return _psc;56 }57 _psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];58 NSURL *url = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"JMDog_Walk.sqlite"];59 [_psc addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:@{NSMigratePersistentStoresAutomaticallyOption:@1} error:nil];60 return _psc;61 }62 63 - (NSManagedObjectModel *)managedObjectModel {64 if (_managedObjectModel) {65 return _managedObjectModel;66 }67 NSURL *url = [[NSBundle mainBundle] URLForResource:@"JMDog_Walk" withExtension:@"momd"];68 _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:url];69 return _managedObjectModel;70 }71 72 @end

需要注意的地方为:

  1. 所有全局变量均为惰性加载,提高效率;
  2. 只用将NSManagedObjectContext​放到.h中去即可;
  3. 调用addPersistentStoreWithType:方法时注意将数据库文件命名为sqlite后缀的类型,否则会报错;
  4. 注意命名的一致性,在代码中均使用JMDog_Walk,在建立Core Data文件时,也要将文件命名为JMDog_Walk

 

 

转载于:https://www.cnblogs.com/jackma86/p/5131348.html

你可能感兴趣的文章
[SilverLight]DataGrid实现批量输入(like Excel)(补充)
查看>>
秋式广告杀手:广告拦截原理与杀手组织
查看>>
翻译 | 摆脱浏览器限制的JavaScript
查看>>
闲扯下午引爆乌云社区“盗窃”乌云币事件
查看>>
02@在类的头文件中尽量少引入其他头文件
查看>>
JAVA IO BIO NIO AIO
查看>>
input checkbox 复选框大小修改
查看>>
BOOT.INI文件参数
查看>>
vmstat详解
查看>>
新年第一镖
查看>>
unbtu使用笔记
查看>>
OEA 中 WPF 树型表格虚拟化设计方案
查看>>
Android程序开发初级教程(一) 开始 Hello Android
查看>>
使用Gradle打RPM包
查看>>
“我意识到”的意义
查看>>
淘宝天猫上新辅助工具-新品填表
查看>>
再学 GDI+[43]: 文本输出 - 获取已安装的字体列表
查看>>
nginx反向代理
查看>>
操作系统真实的虚拟内存是什么样的(一)
查看>>
hadoop、hbase、zookeeper集群搭建
查看>>