【IOS学习】Core Data 框架学习笔记,以及demo

关于Core data

设计用来与MVC设计模式协同工作的

关注的是对象,从Core Data 获取信息时,会创建并返回一个装有受控对象(managed object)的数组
返回的数据结构由模式(schema)或者受控数据模型中定义的

Core Data 栈
由以下内容组成
  • 受控对象模型
  • 持久化存储调度器
  • 持久哈存储和存储文件
  • 受控对象上下文
 

图如下


受控对象模型(managed object model)

也叫对象模型,定义了应用中的数据结构。受控对象模型存储在文件中,拓展名为 .xcdatamodeld可用Core Data模型编辑器编辑

设置 entity

  • attribute
  • relationship
  • fetch property

接下来使用Xcode自带工具生成model


持久化存储调度器
通过受控对象模型可以创建持久化调度器,对象模型定义的实体和关系会受调度器管理
持久化调度器创建好后,基本是一个自动的过程
如果一个应用拥有的存储文件多于一个,调度器的用处就会凸现出来。他将管理底层的存储,提供一个单一的受控对象上下文。

持久化存储和存储文件
生成NSPersistentStore 对象

受控对象上下文
Core Data 返回的是对象而不是值,受控对象上下文的工作是管理Core Data创建并返回的对象
如将持久化存储的数据显示出来我们要这么做
  1. 创建实体描述对象 NSEntityDescription
  2. 为需要的实体新建一个请求
  3. 执行获取请求
  4. 便利返回的对象
上下文创建的对象受自身管理的。上下文监视他返回的内容的所有改变,修改了这些对象的属性,对象上下文会自动记录下这些变化,当该修改完毕,只要调用上下文的保存操作,即可保存到持久化存储中

Core Data的并发性
IOS5 加入了新功能,让受控上下文可以在初始化时选择不同的并发类型。
以前受控对象上下文对象只能在创建上下文的那个线程中使用。现在可用以下三种并发类型初始化
NSConfinementConcurrencyType           //和以前一样
NSMainQueueConcurrencyType            
NSPrivateQueueConcurrencyType
NSMainQueueConcurrencyType 和 NSPrivateQueueConcurrencyType 会再一个GCD分发队列内进行操作,使用基于队列的上下文时,该上下文创建的对象只在创建他的队列内有效,如果使用主队列上下文,就只能在主分发队列中与这个上下文打交道

手动创建Core Data 栈
  1. 创建受控对象模型,新建Data Model,添加entity,添加属性和关系,关系(Relationships)是强关系,相互知道,派送属性(Fetched Properties) 是弱关系
  2. 创建持久化调度器
  3. 为调度器添加一个持久化对象存储
  4. 创建新的受控对象上下文,并设置存储调度器

与Core Data 互动
添加新对象
获取对象并修改数据
删除对象
撤销、重做、回滚和复位(这里操作的都是用户的动作)
用户的动作分为三类
用户触发的控件事件(按钮、滑动条、步进器)
触摸事件(touchesBegin、UIGesureRecognizer)
晃动事件(motionBegan)

CoreDateDemo,界面如下


新建了一个包含了上下文属性的类,做成单例。并暴露保存,以及内容操作
<span style="font-size:12px;">@interface CoreDataManager : NSObject
@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;

+(id)sharedCoreDataManager;
- (BOOL)saveContext;

- (void)undo;
- (void)redo;
- (void)rollback;
- (void)reset;</span>

定制的某一个Model继承了CoreDataManager,具体定制了获取、插入、移除的操作

在.m中把需要修改的字段定义成宏参考资料: IOS5核心框架

#define Entity_Name    @"TimeEntity"
#define Entity_Key     @"number"

@interface TimeEntityManager : CoreDataManager

-(NSArray *)timeEntities;
-(NSArray *)timeEntitiesWithTitle:(NSString *)title;
-(TimeEntity *)makeEntityWithTime:(NSString *)time;
-(BOOL)removeTimeEnities:(NSArray *)timeEArray;
-(BOOL)removeALLTimeEnities;

Demo 下载地址:https://github.com/caigee/iosdev_sample

下的CoreDataDemo

厚吾http://blog.csdn.net/mangosnow

本文遵循“署名-非商业用途-保持一致”创作公用协议


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值