关于Core Data的一些整理(三)
2016-01-14 18:38
357 查看
关于Core Data的一些整理(三)
关于Core Data Stack的四种类与它们的关系如下:NSManagedObjectModel
NSPersistentStore
NSPersistentStoreCoordinator
NSManagedObjectContext
![](http://images2015.cnblogs.com/blog/838821/201601/838821-20160114183512366-1754562701.jpg)
手写Core Data Stack,新建文件继承NSObject,并且在其中要依次初始化三个对象:
NSManagedObjectContext、
NSPersistentStoreCoordinator、
NSManagedObjectModel,具体代码实现如下:
// CoreDataStack.h #import <Foundation/Foundation.h> #import <CoreData/CoreData.h> @interface CoreDataStack : NSObject @property (nonatomic, strong) NSManagedObjectContext *context; - (void)saveContext; @end // CoreDataStack.m #import "CoreDataStack.h" @interface CoreDataStack () @property (nonatomic, strong) NSPersistentStoreCoordinator *psc; @property (nonatomic, strong) NSManagedObjectModel *managedObjectModel; @end @implementation CoreDataStack @synthesize managedObjectModel = _managedObjectModel; - (void)saveContext { if (_context) { NSError *error = nil; if ([_context hasChanges] && [_context save:&error]) { NSLog(@"%@", error.localizedDescription); abort(); } } } - (NSURL *)applicationDocumentsDirectory { NSArray *array = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask]; return array.lastObject; } - (NSManagedObjectContext *)context { if (_context) { return _context; } _context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]; [_context setPersistentStoreCoordinator:[self psc]]; return _context; } - (NSPersistentStoreCoordinator *)psc { if (_psc) { return _psc; } _psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; NSURL *url = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"JMDog_Walk.sqlite"]; [_psc addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:@{NSMigratePersistentStoresAutomaticallyOption:@1} error:nil]; return _psc; } - (NSManagedObjectModel *)managedObjectModel { if (_managedObjectModel) { return _managedObjectModel; } NSURL *url = [[NSBundle mainBundle] URLForResource:@"JMDog_Walk" withExtension:@"momd"]; _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:url]; return _managedObjectModel; } @end
需要注意的地方为:
所有全局变量均为惰性加载,提高效率;
只用将
NSManagedObjectContext放到.h中去即可;
调用addPersistentStoreWithType:方法时注意将数据库文件命名为sqlite后缀的类型,否则会报错;
注意命名的一致性,在代码中均使用
JMDog_Walk,在建立Core Data文件时,也要将文件命名为
JMDog_Walk!
相关文章推荐
- XML基础学习01
- 中国剩余定理
- 白盒测试的学习之路----(三)优化代码
- PHP下SSL加密解密、验证、签名方法(超简单)
- Oracle LOB类型 总结 --整理与网络收集资料
- iOS 在user defined runtime attributes(用户定义的运行时属性)改变UI
- String和StringBuffer参数传递---实例详解
- SQL Server 2012故障转移的looksalive check和is alive check
- 黑客经验谈:跳板攻击入侵技术实例解析
- cloud service 心得: puppet
- 欢迎使用CSDN-markdown编辑器
- 深度学习与自然语言处理之四:卷积神经网络模型(CNN)
- struts2 跳转至404 页面的解决方案
- 欢迎使用CSDN-markdown编辑器
- 日志完美清理总结
- Python操作图片,类似于matlab
- 树形结构的数据库表Schema设计
- IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角矩形、贝塞尔曲线、图片)
- Uniconnection 连 mysql 有时会断线的
- 关于Core Data的一些整理(二)