头文件:

 #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以前的版本的更多相关文章

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

    import UIKit import CoreData // coredata管理器 class CoreDataManager: NSObject { // 单例 static let share ...

  2. idea2019版与maven3.6.2版本不兼容引发的血案

    昨天遇到了点问题解决浪费了一些时间(导致更新内容较少)回顾下问题 项目出现Unable to import maven project: See logs for details 翻了好多博客 莫名的 ...

  3. [iOS开发]Xcode8兼容iOS7以及低版本Xcode调试高版本iOS系统

    现在的项目一般都要兼容iOS7系统,同时也要兼容iOS10,在Xcode8上面,默认情况下无法调试iOS7,因为缺乏调试iOS7需要的配置文件.同时在低版本的Xcode上面(8以下),也无法调试iOS ...

  4. Xcode8兼容iOS7以及低版本Xcode调试高版本iOS系统

    我们使用Xcode8新建的工程,默认支持的最低系统是iOS8,我们可以手动更改版本到7.0,但是不支持真机调试. 现在的项目一般都要兼容iOS7系统,同时也要兼容iOS10,在Xcode8上面,默认情 ...

  5. iOS拍照上传后,在web端显示旋转 Swift+OC版解决方案

    问题描述: 手机头像上传,遇到一个怪现象,就是拍照上传时,手机端显示头像正常,但在web端查看会有一个左旋90度的问题. 并且照片竖怕才会有此问题,横拍不存在. 原因分析: 手机拍照时,用相机拍摄出来 ...

  6. 【原】webapp开发中兼容Android4.0以下版本的css hack

    话说现在的手机型号越来越多,主要还是android和ios这2个巨头称霸了江湖,而他们自带的浏览器内核是webkit,那对于做移动网页开发的同事来说,一般只要做好webkit内核浏览器的展现效果就行了 ...

  7. WKWebView与Js实战(OC版)

    前言 上一篇专门讲解了WKWebView相关的所有类.代理的所有API.那么本篇讲些什么呢?当然是实战了! 本篇文章教大家如何使用WKWebView去实现常用的一些API操作.当然,也会有如何与JS交 ...

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

    iOS编程——通过UUID和KeyChain来代替Mac地址实现iOS设备的唯一标示(OC版) 很多的应用都需要用到手机的唯一标示,而且要求这个唯一标示不能因为应用app的卸载或者改变而变化. 在iO ...

  9. wzplayer V1.6正式版(无限制)不支持加密版本 2014-07-08

    2014-07-08 修复部分视频倾斜问题,同时给受影响的客户给予更新. wzplayer V1.6正式版(无限制)不支持加密版本 发布于官方,下载地址wzplayer V1.6正式版(无限制)不支持 ...

随机推荐

  1. JS魔法堂:再识Number type

    Brief 本来只打算理解JS中0.1 + 0.2 == 0.30000000000000004的原因,但发现自己对计算机的数字表示和运算十分陌生,于是只好恶补一下.以下是恶补后的成果: 基础野:细说 ...

  2. The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value. 错误的原因及解决方案

    异常描述: 数据访问用EF,在数据库中用getdate()设置的默认值,程序中没有赋值. 出现异常. 此错误在百度上在我写此文之前没有多少解决方案,谷歌之等到以下两个有用的页: http://stac ...

  3. github.com/dotnet/orleans

    Orleans is a framework that provides a straight-forward approach to building distributed high-scale ...

  4. 【转载】IE浏览器常见的9个css Bug以及解决办法

    IE浏览器常见的9个css Bug以及解决办法 我们在浏览网页的时候经常看见这样的现象:某个网页在IE6浏览器中打开很正常,但是在IE8里面打开可能完全变形了.或者也有可能出现完全相反的现象.这让We ...

  5. Vimium 下载 像个 Geek 一样去浏览

    插件地址(被墙):https://chrome.google.com/webstore/detail/dbepggeogbaibhgnhhndojpepiihcmeb 本地下载:http://file ...

  6. JS通过身份证号码获取出生年月日

    这里我们讲述一下关于jq根据身份证号码计算出生日期.年龄.性别,有需要的同学可参考一下.    代码如下 复制代码 //获取输入身份证号码 var UUserCard = $("#UUser ...

  7. 做10年Windows程序员与做10年Linux程序员的区别

    如果一个程序员从来没有在linux,unix下开发过程序,一直在windows下面开发程序, 同样是工作10年, 大部分情况下与在linux,unix下面开发10年的程序员水平会差别很大.我写这篇文章 ...

  8. 如何优雅地使用 Windows 10 ?

    身为一个伪电脑Geek,就算不懂电脑,也要把那些更不懂电脑的人给唬住. 1.入门级别: 当然就是让别人从视觉上感觉你的电脑不一般啦 第一步:桌面要干净,干净到什么程度呢,要像这样 当别人第一眼看到你的 ...

  9. Eclipse上GIT插件EGIT使用手册

    http://blog.csdn.net/luckarecs/article/details/7427605 Eclipse上GIT插件EGIT使用手册   一_安装EGIT插件 http://dow ...

  10. 三层架构与MVC之间的区别

    文章转发自:http://www.admin10000.com/document/535.html 我们平时总是将三层架构与MVC混为一谈,殊不知它俩并不是一个概念.下面我来为大家揭晓我所知道的一些真 ...