码迷,mamicode.com
首页 > 其他好文 > 详细

CoreData简单教学(一)

时间:2014-10-04 02:41:05      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   color   io   os   使用   ar   for   

1. New Empty Project -> Use CoreData

2. new CoreData Model . 

file:///Users/xueyulun/Desktop/屏幕快照%202014-10-03%20下午11.31.04.png

3. 自己实现CoreDataHandle

//
//  ADPersonHandle.h
//  CoreData_deeper
//
//  Created by 薛雨仑 on 14-10-3.
//  Copyright (c) 2014年 Dylan. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface ADPersonHandle : NSObject

@property (nonatomic, readonly, strong) NSManagedObjectContext * managedObjectContext;

@property (nonatomic, readonly, strong) NSManagedObjectModel * managedObjectModel;

@property (nonatomic, readonly, strong) NSPersistentStoreCoordinator * persistenStoreCoordinator;

- (NSURL *)applicationDocumentsDirectory;

@end

 .m

 1 //
 2 //  ADPersonHandle.m
 3 //  CoreData_deeper
 4 //
 5 //  Created by 薛雨仑 on 14-10-3.
 6 //  Copyright (c) 2014年 Dylan. All rights reserved.
 7 //
 8 
 9 #import "ADPersonHandle.h"
10 
11 @implementation ADPersonHandle
12 
13 @synthesize managedObjectContext = _managedObjectContext;
14 @synthesize managedObjectModel = _managedObjectModel;
15 @synthesize persistenStoreCoordinator = _persistenStoreCoordinator;
16 
17 #pragma mark - getter
18 // 上下文
19 - (NSManagedObjectContext *)managedObjectContext {
20     if (_managedObjectContext) {
21         return  _managedObjectContext;
22     }
23     
24     NSPersistentStoreCoordinator * coordinator = [self persistenStoreCoordinator];
25     if (coordinator == nil) {
26         _managedObjectContext = [[NSManagedObjectContext alloc] init];
27         [_managedObjectContext setPersistentStoreCoordinator:coordinator];
28     }
29     
30     return _managedObjectContext;
31 }
32 
33 // 协调器
34 - (NSPersistentStoreCoordinator *)persistenStoreCoordinator {
35     if (_persistenStoreCoordinator) {
36         return _persistenStoreCoordinator;
37     }
38     
39     NSURL * storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"Person.sqlite"];
40     
41     _persistenStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
42     [_persistenStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:nil];
43     
44     return _persistenStoreCoordinator;
45 }
46 
47 // 模型
48 - (NSManagedObjectModel *)managedObjectModel {
49     if (_managedObjectModel) {
50         return _managedObjectModel;
51     }
52     
53     NSURL * modelURL = [[NSBundle mainBundle] URLForResource:@"Person" withExtension:@"momd"];
54     _managedObjectModel = [[NSManagedObjectModel alloc]  initWithContentsOfURL:modelURL];
55     
56     return _managedObjectModel;
57 }
58 
59 #pragma mark - url
60 // 获得所在目录
61 - (NSURL *)applicationDocumentsDirectory {
62     return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
63 }
64 
65 @end

 

这样, 最简单的框架, 创建结构

 

然后 我们来看一些理论的话

 

为何要使用Core Data

使用Core Data有很多原因,其中最简单的一条就是:它能让你为Model层写的代码的行数减少为原来的50 %到70%。 这归功于之前提到的Core Data的特性。更妙的是,对于上述特性你也既不用去测试,也不用花 功夫去优化。

Core Data拥有成熟的代码,这些代码通过单元测试来保证品质。应用Core Data的程序每天被世界上几百 万用户使用。通过了几个版本的发布,已经被高度优化。 它能利用Model层的信息和运行时的特性,而不通 过程序层的代码实现。 除了提供强大的安全支持和错误处理外,它还提供了最优的内存扩展性,可实现有竞 争力的解决方案。不使用Core Data的话,你需要花很长时间来起草自己的方案,解决各种问题,这样做效率 不高。

除了Core Data本身的优点之外,使用它还有其他的好处: 它很容易和Mac OS X系统的Tool chain集成; 利用Model设计工具可以按图形化方式轻松创建数据库的结构;你可以用Instruments的相关模板来测试Core Data的效率并debug。 在Mac OS X的桌面程序中,Core Data还和Interface Builder集成(打开Inspector可 以看到有binding的选项,这个东东iPhone上木有。。。),按照model来创建UI变的更简单了。 这些功能能 更进一步的帮助你缩短设计、开发、测试程序的周期。

 

Core Data 功能初窥

对于处理诸如对象生命周期管理、对象图管理等日常任务,Core Data框架提供了广泛且自动化的解决方案 。它有以下特性。

(注:对象图-Object graph的解释:在面向对象编程中,对象之间有各种关系,例如对象直接引用另外的 对象,或是通过引用链间接的引用其他对象,这些关系组成了网状的结构。我们把这些对象(和它们之间的 联系)成为对象图。 对象图可大可小,有繁有简。 只包含单个字符串对象的数组就是一个简单的代表;而包 含了application对象,引用windows, menus和相关视图对象、其他对象这样的结构就是复杂对象图的例子 ——这是在说mainwindow.xib。

有时,你可能想要把这样的对象图转化形式,让它们可以被保存到文件中,以使其他的进程或其他的机器 可以再次将保存的内容读出,重购对象。 这样的过程常被成之为“归档”(Archiving)。

有些对象图是不完整的——通常称之为局部对象图(partial object graphs)。局部对象图包含了“占位符” (Placeholder)对象,所谓”占位符“,就是一些暂时无内容的对象,它们将再后期被具体化。一个典型的例 子就是nib文件中包含的File‘s Owner对象。

1) 对于key-value coding 和key-value observing完整且自动化的支持 除了为属性整合KVC和KVO的访问方法外, Core Data还整合了适当的集合访问方法来处理多值关系。

2) 自动验证属性(property)值
Core Data中的managed object扩展了标准的KVC 验证方法,以保证单个的数值在可接受的范围之内,从而 使组合的值有意义。(需校准翻译)

3) 支持跟踪修改和撤销操作
对于撤销和重做的功能,除过用基本的文本编辑外,Core Data还提供内置的管理方式。

4) 关系的维护
Core Data管理数据的变化传播,包括维护对象间关系的一致性。

5) 在内存中和界面上分组、过滤、组织数据

6) 自动支持对象存储在外部数据仓库的功能

7) 创建复杂请求 你不需要动手去写复杂的SQL语句,就可以创建复杂的数据请求。方法是在“获取请求”(fetch request)中关联 NSPredicate(又看到这个东东了,之前用它做过正则)。NSPrdicate支持基本的功能、相关子查询和其他 高级的 SQL特性。它还支持正确的Unicode编码(不太懂,请高人指点), 区域感知查询(据说就是根据区 域、语言设置调整查询的行为)、排序和正则表达式。

8) 延迟操作

9) 合并的策略
Core Data 内置了版本跟踪和乐观锁定(optimistic locking)来支持多用户写入冲突的解决。 注:乐观锁,假定数据一般不出现冲突,所以在数据提交更新的时候,才对数据的冲突进行检测,如果冲突 了,就返回冲突信息。 

10) 数据迁移
就开发工作和运行时资源来说,处理数据库架构的改变总是很复杂。Core Data的schema migration工具可以 简化应对数据库结构变化的任务, 而且在某些情况下,允许你执行高效率的数据库原地迁移工作。

11) 可选择针对程序Controller层的集成,来支持UI的显示同步
Core Data在iPhone OS之上 提供NSFetchedResultsController对象来做相关工作,在Mac OS X上,我们用 Cocoa提供的绑定(Binding)机制来完成。

 

// ps 今天比较晚了, 明天我们继续来分享coredata。    上边理论内容借鉴cocoaChina文章。

 

 

 

CoreData简单教学(一)

标签:des   style   blog   color   io   os   使用   ar   for   

原文地址:http://www.cnblogs.com/Dylam/p/Dylan_CoreData.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!