关于Core Data的一些整理(三)

关于Core Data的一些整理(三)

关于Core Data Stack的四种类与它们的关系如下:

  • NSManagedObjectModel
  • NSPersistentStore
  • NSPersistentStoreCoordinator
  • NSManagedObjectContext

手写Core Data Stack,新建文件继承NSObject,并且在其中要依次初始化三个对象:NSManagedObjectContextNSPersistentStoreCoordinatorNSManagedObjectModel,具体代码实现如下:

 1 //  CoreDataStack.h
 2
 3 #import <Foundation/Foundation.h>
 4 #import <CoreData/CoreData.h>
 5
 6 @interface CoreDataStack : NSObject
 7
 8 @property (nonatomic, strong) NSManagedObjectContext *context;
 9
10 - (void)saveContext;
11
12 @end
13
14 //  CoreDataStack.m
15
16 #import "CoreDataStack.h"
17
18 @interface CoreDataStack ()
19
20 @property (nonatomic, strong) NSPersistentStoreCoordinator *psc;
21 @property (nonatomic, strong) NSManagedObjectModel *managedObjectModel;
22
23 @end
24
25 @implementation CoreDataStack
26
27 @synthesize managedObjectModel = _managedObjectModel;
28
29 - (void)saveContext {
30   if (_context) {
31     NSError *error = nil;
32     if ([_context hasChanges] && [_context save:&error]) {
33       NSLog(@"%@", error.localizedDescription);
34       abort();
35     }
36   }
37 }
38
39 - (NSURL *)applicationDocumentsDirectory {
40   NSArray *array = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask];
41   return array.lastObject;
42 }
43
44 - (NSManagedObjectContext *)context {
45   if (_context) {
46     return _context;
47   }
48   _context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
49   [_context setPersistentStoreCoordinator:[self psc]];
50   return _context;
51 }
52
53 - (NSPersistentStoreCoordinator *)psc {
54   if (_psc) {
55     return _psc;
56   }
57   _psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
58   NSURL *url = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"JMDog_Walk.sqlite"];
59   [_psc addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:@{NSMigratePersistentStoresAutomaticallyOption:@1} error:nil];
60   return _psc;
61 }
62
63 - (NSManagedObjectModel *)managedObjectModel {
64   if (_managedObjectModel) {
65     return _managedObjectModel;
66   }
67   NSURL *url = [[NSBundle mainBundle] URLForResource:@"JMDog_Walk" withExtension:@"momd"];
68   _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:url];
69   return _managedObjectModel;
70 }
71
72 @end

需要注意的地方为:

  1. 所有全局变量均为惰性加载,提高效率;
  2. 只用将NSManagedObjectContext?放到.h中去即可;
  3. 调用addPersistentStoreWithType:方法时注意将数据库文件命名为sqlite后缀的类型,否则会报错;
  4. 注意命名的一致性,在代码中均使用JMDog_Walk,在建立Core Data文件时,也要将文件命名为JMDog_Walk
时间: 2024-10-10 17:28:21

关于Core Data的一些整理(三)的相关文章

关于Core Data的一些整理(二)

关于Core Data的一些整理(二) 创建NSManagedObject的子类时,有一点是在这中间要强调的一点是,要不要勾选 Use scalar properties for primitive data types. 勾选上这个选项之后就是使用的是你在定义的时候使用的原始数据类型. 如果没有勾选的话,就会存在类型的转化,转换情况如下: String maps to String Integer 16/32/64, Float, Double and Boolean map to NSNum

关于Core Data的一些整理(一)

关于Core Data的一些整理(一) 在Xcode7.2中只有Mast-Debug和Single View中可以勾选Use Core Data 如果勾选了Use Core Data,Xcode会自动在AppDelegate中帮你生成Core Data的核心代码,并且自动生成.xcdatamodeld数据文件 1 //Appdelegate.h中 2 #import <UIKit/UIKit.h> 3 #import <CoreData/CoreData.h> 4 5 @inter

Core Data 学习简单整理01

Core Data是苹果针对Mac和iOS平台开发的一个框架, 通过CoreData可以在本地生成数据库sqlite,提供了ORM的功能,将对象和数据模型相互转换 . 通过Core Data管理和操作. 能够快速达到项目的存储数据的需求. CoreData优点:能够合理管理内存,避免使用sql的麻烦,高效, 由于是苹果提供的解决方案, 所以不用太过担心会有其他问题. 我的观念就是先使用上了后再考虑其他, 问题有一个就解决一个. Core Data 默认使用Sqlite. 因此在沙盒Documen

ios开发:Core Data概述

Core Data 概述 2005年的四月份,Apple 发布了 OS X 10.4,在这个版本中 Core Data 框架发布了.Core Data本身既不是数据库也不是数据库访问框架.相反,Core Data是一个完整的数据模型解决方案.可以简单理解为对持久层的封装,使得我们可以通过可视化建立数据模型,简化数据存取.即使不懂SQL语句,也依然可以使用Core Data.因为Core Data将底层的数据库SQL语句封装成了一套API,并可通过可视化操作来建立数据库的模型和表之间的关系,它甚至

IOS开发之--Core Data的使用

Core Data基础知识 官方的说法是:Core Data is a schema-driven object graph management and persistence framework. 翻译过来的意思大概是:Core Data是一个模式驱动的对象图管理和持久化框架. 好吧,上面的字面意思不是很容易理解,那么我们从以下几个方面来帮助那些有其余开发经验的程序员树立一些观念: Core Data不是一个数据库,但是他可能使用一个数据库.默认情况下,Core Data将使用SQLite,

Core Data

简介 Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象.在此数据操作期间,我们不需要编写任何SQL语句,这个有点类似于著名的Hibernate持久化框架,不过功能肯定是没有Hibernate强大的.简单地用下图描述下它的作用: 左边是关系模型,即数据库,数据库里面有张person表,person表里面有id.name.age三个字段,而且有2条记录: 右

Core Data存储自定义类型数据

目录: 一.使用CoreData存储基本数据 二.使用CoreData存储自定义类型数据 简单介绍CoreData CoreData是iOS编程中使用持久化数据存储的一种方式,我们知道CoreData并不是数据库本身,而是Apple提供的对象持久化技术--Object Persistent technology.CoreData框架为我们的数据变更.管理.对象存储.读取和恢复提供了支持.下面我们来尝试创建一个简单的CoreData Project. 操作 1. 打开x-code,为你的proje

Core Data使用之一(Swift): 保存

Core Data 用于永久化数据,它是基于SQLite数据库的保存一门技术. 那么,在Swift中,它是如何实现的呢? 首先,需要新建一个模板,打开工程中的xcdatamodeld文件,点击“Add Entity” ,这时候,就创建的一个模板.之后,可以修改模板的名称为自己想要的名称.然后,在Attributes里面,点击“+”,添加字段并修改类型. 然后,在代码里面 “import CoreData”.接着,用NSManagedObject来保存对象,它可以转换成任何对象.它的类型是字典.

Core Data-备用

Core Data是一个功能强大的层,位于SQLite数据库之上,它避免了SQL的复杂性,能让我们以更自然的方式与数据库进行交互.Core Data将数据库行转换为OC对象(托管对象)来实现,这样无需任何SQL知识就能操作他们. Core Data位于MVC设计模式中的模型层,一般需要在设备上存储结构化数据时,考虑使用SQLite或是序列化等方法,而Core Data是这两种方法的混合体,并增加了一些功能,提供了SQL强大威力,但是用起来又和序列化一样简单.Core Data能将应用程序中的对象