文档章节

Coredata第一课 认识coredata

长沙戴维营教育
 长沙戴维营教育
发布于 2015/02/04 09:42
字数 1007
阅读 14
收藏 0

问题

在iOS/Mac中我们有许多方式去持久化存储数据:NSUserDefault、Key  chain、C语言文件接口、NSFileHandle、基础框架中的write方法、归档等等。在实际应用中,我们经常需要将这些数据按一定格式转换为 对象,并且进行一定的筛选等操作然后再使用,显得不是很方便。Apple给我们提供了Core  Data框架,可以直接按对象的方式操作数据,让这些变得非常简单。

简介

CoreData中有这么几个常用的元素:

名称 作用
NSManagedObjectModel 对象模型,指定所用对象文件
NSPersistentStoreCoordinator 持久化存储协调器,设置对象的存储方式和数据存放位置
NSManagedObjectContext 对象管理上下文,负责数据的实际操作(重要)
NSEntityDescriptor 实体描述符,描述一个实体,可以用来生成实体对应的对象
NSManagedObject 对象
NSFetchRequest 对象查询,相当于SQL的Select语句

使用步骤

在这篇文章中我们使用最简单的方式,也就是在创建项目的时候,勾选“Core  Data”选项。Xcode会自动替我们在“AppDelegate”中加入创建“NSManagedObjectModel”、 “NSPersistentStoreCoordinate”和“NSManagedObjectContext”等对象,方便后面的使用。

1 . 创建“NSManagedObjectModel”对象。

- (NSManagedObjectModel *)managedObjectModel {     
    if (_managedObjectModel != nil) {         
        return _managedObjectModel;     
    }     
    //CoreData模型文件的路径,注意编译好的模型文件名扩展名为"momd"     
    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"CoreData01" withExtension:@"momd"];    
    _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];     
    return _managedObjectModel; 
}

2 . 创建“NSPersistentStoreCoordinator”对象。

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {     
    if (_persistentStoreCoordinator != nil) {         
        return _persistentStoreCoordinator;     
    }     
    //指定需要持久化的模型对象     
    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];     
    //持久化的存储文件     
    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"CoreData01.sqlite"];     
    NSError *error = nil;     
    //设置存储格式为SQLite     
    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {     
    }     
    return _persistentStoreCoordinator; 
}

3 . 创建上下文

- (NSManagedObjectContext *)managedObjectContext {     
    // Returns the managed object context for the application (which is already bound to the persistent store coordinator for the application.)     
    if (_managedObjectContext != nil) {         
        return _managedObjectContext;     
    }     
    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];     
    if (!coordinator) {         
        return nil;     
    }     
    //创建管理上下文     
    _managedObjectContext = [[NSManagedObjectContext alloc] init];     
    //关联上下文与存储对象     
    [_managedObjectContext setPersistentStoreCoordinator:coordinator];     
    return _managedObjectContext; 
}

4 . 设置模型文件,添加实体(Entity)

点击“CoreData01.xcdatamodelId”文件,然后添加一个实体“Book”,并增加几个属性。Core Data中的实体类似于数据库的表定义,规定了不同字段(属性)的名字和类型。

5 . 创建模型对象的类, "Editor > Create NSManagedobject Subclass"。

6 . 选择使用标量定义数值类型的属性(默认使用NSNumber类型定义int、float等类型的属性)。

7 . Xcode自动创建于实体同名的类,并且继承自“NSManagedObject”。

8 . 创建对象并存储。

//获取AppDelegate中创建的上下文对象 
AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate; 
NSManagedObjectContext *context = appDelegate.managedObjectContext; 
//获取实体描述符 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Book" inManagedObjectContext:context]; 
//创建对象 
Book *book = [[NSManagedObject alloc] initWithEntity:entity insertIntoManagedObjectContext:context]; 
//设置对象的属性 
book.title = @"红楼梦"; 
//保存数据 
[context save:nil];

9 . 以后可以通过"NSFetchRequest"从文件中获取数据。

AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate; 
NSManagedObjectContext *context = appDelegate.managedObjectContext; 
//创建请求对象,用于获取实体Book所对应的全部数据,可以通过给NSFetchRequest设置predicate和sortDescriptors对结果进行筛选和排序。 
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Book"]; 
NSArray *result = [context executeFetchRequest:fetchRequest error:nil]; 
NSLog(@"%@", result);

总结

Core Data的简单使用还是很方便的,我们只需要关注数据内容和处理逻辑,而不需要考虑过多的存储操作。但是它需要使用很多貌似没有直接关联的代码,使得大家感觉非常复杂。

本文档由长沙戴维营教育整理。


© 著作权归作者所有

长沙戴维营教育
粉丝 2
博文 5
码字总数 1368
作品 0
长沙
私信 提问
让你的project支持CoreData

创建工程的时候,如果是基于windows的,就有选择支持coreData,其它的project temple则没有支持coreData选项。如果项目进行到一半,需要加如coreData的支持如何办呢? 我们创建基于windows的...

长平狐
2012/08/13
549
0
Core Data 基本应用

操作coredata 处理4个场景的情况 Core Data 调试模式 简单的实际操作 建立CoreData可视化管理文件,生成对应的实体类 在appDelegate中建立CoreData对应的管理类对象 Document的路径 建立NSM...

云飞扬v5
2016/09/21
1
0
CoreData:使用CoreData完成一个通讯录存储

CoreData作为Apple的亲儿子,依然在App需要存储结构化数据上发挥着重要的作用。CoreData已经超过十年了,而且亲爹还在积极的维护着它。 在Monster、Indeed这些海外主流招聘网站看一下iOS的职...

非典型技术宅
2018/10/29
0
0
iOS中CoreData数据管理系列四——进行数据与页面的绑定

iOS中CoreData数据管理系列四——进行数据与页面的绑定 一、引言 在上一篇博客中,我们讨论了CoreData框架中添加与查询数据的操作,事实上,在大多数情况下,这些数据都是由一个UITableView...

珲少
2016/02/01
1K
0
Swift实践:使用CoreData完成上班签到小工具

image.png 之前在前两篇里面实现了一个十分简陋的通讯录,而且都是通过系统默认的方式创建的CoreData。可是实际中哪里有那么好的事情嘛,要是忘记在创建工程的时候勾选了下面这个图怎么办? ...

非典型技术宅
2017/12/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

总结:TCP/IP协议

一、介绍 TCP协议属于OSI七层模型中的传输层协议,提供处于网络连接中的两台计算机之间的数据 传输。   在传输层有两个性质不同的协议:TCP(Transmission Control Protocol,传输控制协议...

浮躁的码农
23分钟前
2
0
一言不合就删库跑路?万名贡献者和阿里巴巴开源的二三事

9 月 27 日云栖大会,阿里巴巴宣布贾扬清担任开源技术委员会负责人。 有人问:开源是为了什么? 从个人视角看,可以证明自己的专业能力,获得行业认可; 从企业视角看,可以建立技术影响力,...

大涛学弟
33分钟前
4
0
JAVA编程注意事项(性能篇)

1. 尽量在合适的场合使用单例 使用单例可以缩短加载的时间,提高加载的效率,单例主要适用于以下三个方面: 第一,控制资源的使用,通过线程同步来控制资源的并发访问; 第二,控制实例的产生...

你好夜故事
35分钟前
5
0
List 前端 AngularJS JS 对IP排序

数据格式 $scope.dataList=[ {"ip":"192.168.10.10", "port":"8080",...}, { "ip":"192.168.10.12", "port":"8080",... } ,.....] 调用 $scope.ipSortForward($scope.dataList,"ip") 核心代码......

最菜最菜之小菜鸟
35分钟前
4
0
浅析Cassandra LeveledCompactionStrategy

前言 Cassandra是基于LSM架构的分布式数据库。LSM中有一个很重要的过程,就是压缩(Compaction)。默认的压缩策略是SizeTieredCompactionStrategy,今天主要说一下另一种压缩策略LeveledComp...

阿里云官方博客
39分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部