头文件:

 #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. Azure ARM (7) ARM Template - 使用Visual Studio编辑

    <Windows Azure Platform 系列文章目录> 之前介绍的ARM Template,都是使用文本编辑器来编辑JSON文件的. 文本讲介绍如何使用Visual Studio, ...

  2. JavaScript客户端MVC 框架综述

    简介 15 年前,许多人都使用 Perl 和 ColdFusion 之类的工具构建网站.我们经常编写可以在页面顶部查询数据库的脚本,对数据应用必要的转换,以及在同一个脚本底部显示数据.这类架构适合于向 ...

  3. [python基础]关于包,类,模块的那些事儿

    转载请注明出处:http://www.cnblogs.com/codefish/p/5032753.html 在理解python的包,类,模块之前,我一直是将他类比为dll,C#的类,命名空间的这种参 ...

  4. [python IDE] 舒服的pycharm设置

    个人使用的IDE有国产的ulipad,sublime text 3 ,或者vs集成下的,不过讲到好用跨平台,还真是只有pycharm 写python最舒服,一个是因为有社区版,免费,不存在版权问题,另 ...

  5. JAVA - Collections用法总结

    一生二,二生三,三生万物,基础永远是一个计算机人的立身之本.数据结构这门课程的分析奠定了工程师对各种平台中的容器类,集合类的理解基础,正如好多人所说的,如果你对某个平台的集合类理解的不透彻,很可能,你 ...

  6. Java初识

    基础概念 特点: 完全面向对象,动态 解释性,简单.易移植,跨平台 安全健壮,高性能 多线程,分布式 三种核心机制: Java虚拟机 Java Virtual Machine 垃圾收集机制 Garba ...

  7. html5学习笔记(2)

    效果图 以下为源码 <!DOCTYPE html> <html> <head lang="en"> <meta charset=" ...

  8. Android发送短信

    // 发送短信 public void sendMsg(){ String content = edtSend.getText().toString(); SmsManager smsManager ...

  9. python mysql Connect Pool mysql连接池 (201

     easy_install mysql-connector-python >>>import mysql.connector as conner >>> conn ...

  10. 我整理的PHP 7.0主要新特性

    原文:http://php.net/manual/en/migration70.new-features.php 1.标量参数类型声明 现在支持字符串(string).整型(int).浮点数(floa ...