CoreDataManager-OC版-兼容iOS10以前的版本

头文件:

 1 #import <Foundation/Foundation.h>
 2 #import <CoreData/CoreData.h>
 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 stack
15 // 如果重写了只读属性的 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 数据库文件的 URL
43          4> 设置数据库选项
44          */
45         NSString *cacheDir = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject;
46         NSString *path = [cacheDir stringByAppendingPathComponent:@"ys.db"];
47         // 将本地文件的完整路径转换成 文件 URL
48         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 support
63 - (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
时间: 2024-12-12 11:05:35

CoreDataManager-OC版-兼容iOS10以前的版本的相关文章

CoreDataManager-Swift版-兼容iOS10以前的版本

1 import UIKit 2 import CoreData 3 4 // coredata管理器 5 class CoreDataManager: NSObject { 6 7 // 单例 8 static let sharedManager:CoreDataManager = CoreDataManager() 9 10 // 私有化构造函数 11 override private init(){ 12 super.init() 13 } 14 15 // 持久化容器,可以提供管理上下文

修饰符 extern/static/const/UIKIT_EXTERN(OC版extern) 的使用

先逐个分析每个修饰符单独代表的含义,然后再分析某些修饰符组合在一起的时候所代表的含义. const const 相对最好理解,就是修饰的东西不能再被修改. 没有 const 修饰的指针,指针 p 和 *p 都能被修改: 1 // // 定义一个指针 2 int *p = NULL; 3 // // 定义2 个int 类型的变量 4 5 int a = 10; 6 int b = 30; 7 8 // p 指向 a 9 NSLog(@"p = %p, a = %d, b = %d", p

OC版贪吃蛇

昨天写了一个js版贪吃蛇,今天突然想写一个OC版的,来对比一下两种语言的区别 oc版功能,适配所有尺寸iphone,可暂停,可设置地图和蛇的比例,可加速 对比一下会发现js版的相对OC版的会简单一些,有想看js版的可以看我上一篇随笔 程序中没用到任何素材,效果图如下: github源码地址:https://github.com/masterChunlinHan/snake_OC 下面开始,跟js版一样,为了方便学习,所有代码都写在一个controller中,所以头文件中什么也不用写 #impor

WKWebView与Js实战(OC版)

前言 上一篇专门讲解了WKWebView相关的所有类.代理的所有API.那么本篇讲些什么呢?当然是实战了! 本篇文章教大家如何使用WKWebView去实现常用的一些API操作.当然,也会有如何与JS交互的实战. 如果还没有阅读过WKWebView精讲(OC版),请先阅读,不然有可能看不懂下面所讲的内容. 效果图 通过本篇文章,至少可以学习到: OC如何给JS注入对象及JS如何给IOS发送数据 JS调用alert.confirm.prompt时,不采用JS原生提示,而是使用iOS原生来实现 如何监

iOS编程——经过UUID和KeyChain来代替Mac地址实现iOS设备的唯一标示(OC版)

iOS编程——通过UUID和KeyChain来代替Mac地址实现iOS设备的唯一标示(OC版) 很多的应用都需要用到手机的唯一标示,而且要求这个唯一标示不能因为应用app的卸载或者改变而变化. 在iOS7以前是可以通过Mac地址来实现这个功能的,但是iOS7(包含)以后是无法获得Mac地址的:苹果官方推荐使用UUID,但是每次随着APP的卸载重装,UUID会随之发生变化,那该如何处理呢? 我们需要一个能在app卸载重装后不会改变的值,而keyChain恰巧就可以做到.配合UUID就可以实现了!让

微信安卓版下载 Android微信各版本列表

前面ytkah弄了一个iso微信各版本列表,现在就来整一个微信 for Android各版本列表,方便大伙下载.每个版本都放出一些新的功能或修复相关错误,详情可以点击下面的版本链接进行查看.资源收集于网络,不用谢,请叫我雷锋,哈哈哈 微信 6.3.18 for Android 全新发布2016-05-25 微信 6.3.16 for Android 全新发布2016-04-19 微信 6.3.15 for Android 全新发布2016-03-15 微信 6.3.13 for Android

ajaxfileupload.js上传文件兼容IE7及以上版本

要兼容IE789,要修改ajaxfileupload.js;要将此处的代码替换掉 if(window.ActiveXObject) { var io = document.createElement('<iframe id="' + frameId + '" name="' + frameId + '" />'); if(typeof uri== 'boolean'){ io.src = 'javascript:false'; } else if(typ

怎么让一个项目里swift与OC可以兼容混合开发?

在苹果推出了swift语言之后,很多人担心OC很快会被取代,但是苹果方面表示2年内不会摒弃OC.但现在也快了啊.有的开发团队已经开始基于swift开发,但是有很多旧的框架还没来得及用swift写出来,并且某些swift的功能你还不会写,想用OC写.因此在swift开发的程序中时不时会用到OC的类,怎么让两门语言在一个程序里无缝衔接? 其实很方便 如果你不是在董铂然博客园看到本文请 点击查看原文 如图这是一个新建的swift项目,里面直接拖入了一个SVProgressHUD框架 因为swift语言

Git for Windows,TortoiseGit兼容WinXP的最后版本及下载方法

TortoiseGit兼容Windows XP和Windows Server 2003的最后版本: TortoiseGit 1.8.16.0 (https://download.tortoisegit.org/tgit/1.8.16.0/) Git for Windows支持Windows XP和Windows Server 2003的最后版本: Git 2.10.0 (https://github.com/git-for-windows/git/releases/tag/v2.10.0.win