CoreDataManager-OC版-兼容iOS10以前的版本
头文件:
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h> /**
CoreData管理器
*/
@interface CoreDataManager : NSObject + (instancetype)sharedManager; /**
持久化容器 - 可以提供管理上下文 iOS 10 推出
包含了 Core Data stack 中所有的核心对象,都不是线程安全的 - NSManagedObjectContext *viewContext; 管理上下文
- NSManagedObjectModel *managedObjectModel;
- NSPersistentStoreCoordinator *persistentStoreCoordinator;
*/
//@property (readonly, strong) NSPersistentContainer *persistentContainer; /**
管理对象上下文
*/
@property (readonly, strong) NSManagedObjectContext *moc; /**
保存上下文
*/
- (void)saveContext; @end
.m文件:
#import "CoreDataManager.h" @implementation CoreDataManager + (instancetype)sharedManager {
static id instance;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [self new];
});
return instance;
} #pragma mark - Core Data stack
// 如果重写了只读属性的 getter 方法,编译器不再提供 _成员变量
@synthesize moc = _moc; /**
为了低版本的兼容
*/
- (NSManagedObjectContext *)moc { if (_moc != nil) {
return _moc;
} // 互斥锁,应该锁定的代码尽量少!
@synchronized (self) { // 1. 实例化管理上下文
_moc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]; // 2. 管理对象模型(实体)
NSManagedObjectModel *mom = [NSManagedObjectModel mergedModelFromBundles:nil]; // 3. 持久化存储调度器
NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:mom]; // 4. 添加数据库
/**
1> 数据存储类型
3> 保存 SQLite 数据库文件的 URL
4> 设置数据库选项
*/
NSString *cacheDir = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject;
NSString *path = [cacheDir stringByAppendingPathComponent:@"ys.db"];
// 将本地文件的完整路径转换成 文件 URL
NSURL *url = [NSURL fileURLWithPath:path]; NSDictionary *options = @{NSMigratePersistentStoresAutomaticallyOption: @(YES),
NSInferMappingModelAutomaticallyOption: @(YES)}; [psc addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:options error:NULL]; // 5. 给管理上下文指定存储调度器
_moc.persistentStoreCoordinator = psc;
} return _moc;
} #pragma mark - Core Data Saving support
- (void)saveContext {
NSManagedObjectContext *context = self.moc; // 判断上下文中是否有数据发生变化
// `事务` 可以保存多个数据,不一定每次数据变化都需要保存,例如:for 增加多条记录,就可以最后调用一次保存操作即可!
if (![context hasChanges]) {
return;
} // 保存数据
NSError *error = nil; if (![context save:&error]) {
NSLog(@"保存数据出错 %@, %@", error, error.userInfo);
}
} @end
CoreDataManager-OC版-兼容iOS10以前的版本的更多相关文章
- CoreDataManager-Swift版-兼容iOS10以前的版本
import UIKit import CoreData // coredata管理器 class CoreDataManager: NSObject { // 单例 static let share ...
- idea2019版与maven3.6.2版本不兼容引发的血案
昨天遇到了点问题解决浪费了一些时间(导致更新内容较少)回顾下问题 项目出现Unable to import maven project: See logs for details 翻了好多博客 莫名的 ...
- [iOS开发]Xcode8兼容iOS7以及低版本Xcode调试高版本iOS系统
现在的项目一般都要兼容iOS7系统,同时也要兼容iOS10,在Xcode8上面,默认情况下无法调试iOS7,因为缺乏调试iOS7需要的配置文件.同时在低版本的Xcode上面(8以下),也无法调试iOS ...
- Xcode8兼容iOS7以及低版本Xcode调试高版本iOS系统
我们使用Xcode8新建的工程,默认支持的最低系统是iOS8,我们可以手动更改版本到7.0,但是不支持真机调试. 现在的项目一般都要兼容iOS7系统,同时也要兼容iOS10,在Xcode8上面,默认情 ...
- iOS拍照上传后,在web端显示旋转 Swift+OC版解决方案
问题描述: 手机头像上传,遇到一个怪现象,就是拍照上传时,手机端显示头像正常,但在web端查看会有一个左旋90度的问题. 并且照片竖怕才会有此问题,横拍不存在. 原因分析: 手机拍照时,用相机拍摄出来 ...
- 【原】webapp开发中兼容Android4.0以下版本的css hack
话说现在的手机型号越来越多,主要还是android和ios这2个巨头称霸了江湖,而他们自带的浏览器内核是webkit,那对于做移动网页开发的同事来说,一般只要做好webkit内核浏览器的展现效果就行了 ...
- WKWebView与Js实战(OC版)
前言 上一篇专门讲解了WKWebView相关的所有类.代理的所有API.那么本篇讲些什么呢?当然是实战了! 本篇文章教大家如何使用WKWebView去实现常用的一些API操作.当然,也会有如何与JS交 ...
- iOS编程——经过UUID和KeyChain来代替Mac地址实现iOS设备的唯一标示(OC版)
iOS编程——通过UUID和KeyChain来代替Mac地址实现iOS设备的唯一标示(OC版) 很多的应用都需要用到手机的唯一标示,而且要求这个唯一标示不能因为应用app的卸载或者改变而变化. 在iO ...
- wzplayer V1.6正式版(无限制)不支持加密版本 2014-07-08
2014-07-08 修复部分视频倾斜问题,同时给受影响的客户给予更新. wzplayer V1.6正式版(无限制)不支持加密版本 发布于官方,下载地址wzplayer V1.6正式版(无限制)不支持 ...
随机推荐
- jQuery DOM操作
对节点的操作 查找节点 查找节点可以直接利用jQuery选择器来完成,非常便利. 插入节点 jQuery提供了8种插入节点的方法. 序号 方法 描述 实例 1 append() 向每个匹配的元素内部追 ...
- UEditor 1.4.3.1.NET版本上传配置备忘录
UEditor用起来还是挺方便的,下面是记录一下在上传中的配置问题(主要是上传图片的配置,其他的都是类似的). 我下载的是UEditor 1.4.3.1 .NET版本. 官网的配置说明地址为 http ...
- Dapper学习 - Dapper的基本用法(二) - 存储过程/函数
上一篇貌似少介绍了自定义函数和存储过程, 因为这两个也可以使用查询的方式来实现功能, 这一篇就补上 一.自定义函数的创建和调用 (mysql的) Delimiter $$ drop function ...
- winform简单打印
首先新建一个winform 添加winform中自带的打印控件 winform中有默认的打印控件 1.按图片内容将控件拖拽到form中! 2.然后将pageSetupDialog1,printDial ...
- LINQ的Except方法
在两个集合中,左边集合减去右边集合的元素: source code: List<int> a = new List<int>{ { }, { }, { } }; List< ...
- 查看Eclipse版本
点击Help->About Eclipse,在弹出的对话框下部有很多logo. 鼠标在logo上停留,会有提示,找出提示为Eclipse.org的那个logo,即为Eclipse的logo,点击 ...
- 市面上常见的javaEE WEB服务软件
常见的市面上web服务软件 Tomcat:轻量级的WEB应用程序服务器(开源),开源组织Apache的产品.免费的.支持部分的JavaEE规范.(servlet.jsp.jdbc,但ejb, rmi不 ...
- Erlang垃圾回收机制的二三事
声明:本片文章是由Hackernews上的[Erlang Garbage Collection Details and Why ItMatters][1]编译而来,本着学习和研究的态度,进行的编译,转 ...
- Date类型 方法
Date 方法函数 Date.parse():可以获得该日期的毫秒数 var now=Date.parse('May 25,2005')//1085414400000 Date.UTC():也可以获得 ...
- 20个免费的 AngularJS 资源和开发教程
曾经,jQuery 无疑是最受欢迎的开源的 JavaScript 库,如今它有了很多的竞争对手,像 AngularJS.React.KnockoutJS 等等.在这里,我想重点关注一下 Angular ...