iOS学习笔记14(1)—Core Data简单介绍和实现

iOS学习笔记14(1)—Core Data简单介绍和实现


Core Data可以将模型对象保存到持久化存储中,并在需要的时候将它们取出。Core Data应用程序的持久化存储范围可以从XML文件到SQL数据库。

Core Data简化了应用程序创建和使用托管对象的方式,通过Core Data管理应用程序的数据模型,可以极大程度减少需编写的代码数量。 

Core Data还具有下述特征:

将对象数据存储在SQLite数据库以获得性能优化。

提供NSFetchedResultsController类用于管理表视图的数据。即将Core Data的持久化存储显示在表视图中,并对这些数据进行管理:增、删,改。

管理undo/redo操作。

检查托管对象的属性值是否正确。 

Core Data的核心概念是托管对象。托管对象是由CoreData管理的简单模型对象,必须是NSManagedObject类或其子类的实例。托管对象模型包含一些应用程序托管对象(也称为实体)的描述。每个描述负责指定一个实体的属性、它与其它实体的关系、以及像实体名称和实体表示类这样的元数据。 

基本实现大致需要如下步骤

1、创建和编辑模型文件

XCode-File菜-New-File-iOS-CoreData-DataModel-next-输入名称-保存。 


2、生成CoreData的.h和.m文件

XCode-File菜-New-File-iOS-CoreData- NSManagedObject subclass –next-选中上面步骤1中的模型文件-Create。

这个步骤并不是必须的,但使用它们会比较方便,因为借助它们可以在应用中使用点表示法,这样就不必使用valueForKey:调用来检索托管对象属性了。 


3、指定存储数据文件

// 指定存储数据文件,url指向希望用于存储模型数据的文件。

NSURL *url = [NSURLfileURLWithPath: [NSHomeDirectory() stringByAppendingString:@"/Documents/CoreDataTest.sqlite"]]; 


4、创建托管对象模型

// 创建托管对象模型

NSManagedObjectModel*managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil]; 


5、创建持久化存储协调器,并使用SQLite数据库做持久化存储

// 创建持久化存储协调器,并使用SQLite数据库做持久化存储

NSPersistentStoreCoordinator*persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc]initWithManagedObjectModel:managedObjectModel];

NSError *error;

if(![persistentStoreCoordinator addPersistentStoreWithType: NSSQLiteStoreType

                                             configuration:nil

                                                       URL: url

                                                   options:nil

                                                      error:&error]){

    NSLog(@"Error: %@", [errorlocalizedDescription]);

}


 6、创建托管对象上下文

// 创建托管对象上下文

NSManagedObjectContext *ct =[[NSManagedObjectContext alloc] init];

self.context = ct;

[self.contextsetPersistentStoreCoordinator: persistentStoreCoordinator];

[ct release];


 7、创建实体描述对象

// 创建实体描述对象

Person *person1 = (Person*)[NSEntityDescription insertNewObjectForEntityForName:@"Person"

                                                         inManagedObjectContext:self.context];

person1.name = @"Joe";

person1.age = 29;


 8、创建托管对象

NSManagedObject*managedObject = [[NSManagedObjectalloc] initWithEntity: entityDescription insertIntoManagedObjectContext: managedObjectContext];


 9、保存

NSError *error;

if (![self.context save:&error]){

    NSLog(@"Error: %@", [errorlocalizedDescription]);

}


 10、创建获取数据请求

// 创建获取数据请求

NSFetchRequest *fetchRequest= [[NSFetchRequest alloc] init];

[fetchRequest setEntity:[NSEntityDescription entityForName:@"Person"

inManagedObjectContext:self.context]];


11、获取持久化存储中的数据,并对数据进行缓存

// 获取持久化存储中的数据,并对数据进行缓存

NSError *error;

self.results =[[NSFetchedResultsController alloc] initWithFetchRequest: fetchRequest

                                                  managedObjectContext:self.context

                                                    sectionNameKeyPath:nil

                                                             cacheName:@"Root"];

self.results.delegate =self;

if (![[self results]performFetch:&error]){

    NSLog(@"Error: %@", [errorlocalizedDescription]);


12、数据显示

// 数据显示

for (Person *personinself.results.fetchedObjects){

    NSLog(@"%@ : %d", person.name, person.age);

}

 

详细的了解Core Data请参考:

http://www.cocoachina.com/iphonedev/sdk/2010/1126/2397.html

或:

http://blog.csdn.net/jjunjoe/article/details/8772174


归档为sqlite的详细工程源码地址:

http://download.csdn.net/detail/jjunjoe/5054969


归档为xml的详细工程源码地址:

http://download.csdn.net/detail/jjunjoe/5056090


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值