标签: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文章。
标签:des style blog color io os 使用 ar for
原文地址:http://www.cnblogs.com/Dylam/p/Dylan_CoreData.html