博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CoreDataManager-OC版-兼容iOS10以前的版本
阅读量:6336 次
发布时间:2019-06-22

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

头文件:

1 #import 
2 #import
3 4 /** 5 CoreData管理器 6 */ 7 @interface CoreDataManager : NSObject 8 9 + (instancetype)sharedManager;10 11 /**12 持久化容器 - 可以提供管理上下文 iOS 10 推出13 包含了 Core Data stack 中所有的核心对象,都不是线程安全的14 15 - NSManagedObjectContext *viewContext; 管理上下文16 - NSManagedObjectModel *managedObjectModel;17 - NSPersistentStoreCoordinator *persistentStoreCoordinator;18 */19 //@property (readonly, strong) NSPersistentContainer *persistentContainer;20 21 /**22 管理对象上下文23 */24 @property (readonly, strong) NSManagedObjectContext *moc;25 26 /**27 保存上下文28 */29 - (void)saveContext;30 31 @end

.m文件:

1 #import "CoreDataManager.h" 2  3 @implementation CoreDataManager 4  5 + (instancetype)sharedManager { 6     static id instance; 7     static dispatch_once_t onceToken; 8     dispatch_once(&onceToken, ^{ 9         instance = [self new];10     });11     return instance;12 }13 14 #pragma mark - Core Data stack15 // 如果重写了只读属性的 getter 方法,编译器不再提供 _成员变量16 @synthesize moc = _moc;17 18 /**19  为了低版本的兼容20  */21 - (NSManagedObjectContext *)moc {22     23     if (_moc != nil) {24         return _moc;25     }26     27     // 互斥锁,应该锁定的代码尽量少!28     @synchronized (self) {29         30         // 1. 实例化管理上下文31         _moc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];32         33         // 2. 管理对象模型(实体)34         NSManagedObjectModel *mom = [NSManagedObjectModel mergedModelFromBundles:nil];35         36         // 3. 持久化存储调度器37         NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:mom];38         39         // 4. 添加数据库40         /**41          1> 数据存储类型42          3> 保存 SQLite 数据库文件的 URL43          4> 设置数据库选项44          */45         NSString *cacheDir = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject;46         NSString *path = [cacheDir stringByAppendingPathComponent:@"ys.db"];47         // 将本地文件的完整路径转换成 文件 URL48         NSURL *url = [NSURL fileURLWithPath:path];49         50         NSDictionary *options = @{NSMigratePersistentStoresAutomaticallyOption: @(YES),51                                   NSInferMappingModelAutomaticallyOption: @(YES)};52         53         [psc addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:options error:NULL];54         55         // 5. 给管理上下文指定存储调度器56         _moc.persistentStoreCoordinator = psc;57     }58     59     return _moc;60 }61 62 #pragma mark - Core Data Saving support63 - (void)saveContext {64     NSManagedObjectContext *context = self.moc;65     66     // 判断上下文中是否有数据发生变化67     // `事务` 可以保存多个数据,不一定每次数据变化都需要保存,例如:for 增加多条记录,就可以最后调用一次保存操作即可!68     if (![context hasChanges]) {69         return;70     }71     72     // 保存数据73     NSError *error = nil;74     75     if (![context save:&error]) {76         NSLog(@"保存数据出错 %@, %@", error, error.userInfo);77     }78 }79 80 @end

 

转载于:https://www.cnblogs.com/panda1024/p/6219726.html

你可能感兴趣的文章
优秀设计师应当知道的几大UI设计原则(一)
查看>>
mongodb高级查询
查看>>
struts2.1 struts.devMode BUG解决方案
查看>>
日本法院裁定三星诉苹果专利侵权案败诉
查看>>
Windows Server 2012R2 桌面体验问题直通车
查看>>
Springboot配置文件读取报错Configuration property name 'projectUrl' is not valid:
查看>>
HTTP状态码
查看>>
今天的学习
查看>>
面试必问之JVM原理
查看>>
mysql主主同步+Keepalived
查看>>
java位移运算符 转
查看>>
转:strcpy实现的考察要点
查看>>
【转】Map/Reduce简介
查看>>
LOB
查看>>
js验证姓名和身份证号
查看>>
Solr空格默认值是AND还是OR
查看>>
(转)SQL SERVER 生成建表脚本
查看>>
对 Java Integer.valueOf() 的一些了解
查看>>
253:Cube painting
查看>>
2016 年 Java 工具和技术的调查:IDEA 已超过
查看>>