文档章节

iOS应用数据存取之数据库存储-----Core Data

哥特复心
 哥特复心
发布于 2014/01/08 01:23
字数 823
阅读 3756
收藏 23

iOS应用数据存取的常用方式有如下几种 XML属性列表 —— PList NSKeyedArchiver 归档 Preference(偏好设置) SQLite3 Core Data

现在我想记录以下我对core Data的认识 存在理由:苹果公司为了关照不会使用SQL数据库的程序员,而产生的,面向对象操作数据库的oc语言 Core Data简介: Core Data 是iOS SDK 里的一个很强大的框架,允许程序员以面向对象的方式储存和管理数据。使用Core Data框架,程序员可以很轻松有效地通过面向对象的接口管理数据 Core Data框架提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite3数据库文件中,也能够将保存在数据库中的数据还原成OC对象 在数据操作过程中,无需编写任何SQL语句 要使用Core Data,需要导入CoreData框架

NSPersistentStoreCoordinator的产生: 为了让模型对象和数据库能够连接起来,苹果公司就创建了NSPersistentStoreCoordinator这个对象,用来作为他们之间的桥梁! [NSManagedObjectModel mergedModelFromBundles:nil];合并所有的图形化定义的Mode--------------》[[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model]:建立持久化存储调度---------------> addPersistentStoreWithType:指定数据库文件保存的路径,如果有,直接打开,如果没有,新建在打开---------------> _sharedContext.persistentStoreCoordinator = store;获得数据库操作句柄

具体使用如下 // 1. 实例化持久化的存储 // 1.1 从Bundle中加载被管理的数据模型 NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil]; // 1.2 实例化持久化存储调度 NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model]; ... // 1.3 添加持久化存储(SQLite)- [store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:&error]; ...---------------这里我们是不是可以添加持久化存储为sql数据库呢????? // 管理对象上下文 _context = [[NSManagedObjectContext alloc] init]; _context.persistentStoreCoordinator = store;

NSEntityDescription insertNewObjectForEntityForName 实体(数据库的表)的描述(最开始建立数据模型时指定的实体) 实体描述,用于描述个人信息的一个对象 Context,统一负责数据库的操作 实例: Person *p = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:_context]; p.name = @"张三"; p.age = @18; [_context save:nil];

执行查询之后

  1. Sections属性中记录了分组情况,如果没有指定分组,则是所有对象! Sections对象遵守了NSFetchedResultsSectionInfo协议!
  2. 使用objectAtIndexPath可以直接取出查询的结果。
  3. 设置查询结果控制器的代理方法,并且实现 controllerDidChangeContent:(NSFetchedResultsController *)controller 代理方法,可以在数据库内容发生变化时,重新刷新表格即可 所有数据变化,尽在掌控!

查询数据——NSFetchedResultsController NSManagedObjectContext *context = [[DataManager sharedDataManager] sharedContext]; NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"]; // 定义查询排序 NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]; request.sortDescriptors = @[sort]; // 定义查询结果控制器 _fetchedResultController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:context sectionNameKeyPath:nil cacheName:nil]; [_fetchedResultController performFetch:&error];

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"]; request.predicate = [NSPredicate predicateWithFormat:@"%K LIKE '52' OR name CONTAINS '三'", @"phoneNo"]; NSArray *array = [_context executeFetchRequest:request error:nil];


最后,在开发中要注意 如果开发过程中,修改了数据模型,简单的办法就是将沙盒中的数据库直接删除! 否则运行会崩溃!

© 著作权归作者所有

哥特复心
粉丝 109
博文 68
码字总数 40593
作品 0
长沙
高级程序员
私信 提问
加载中

评论(2)

shukaka
shukaka
写得好很好懂!
KavenSu
KavenSu
dg
iOS 数据库比较:SQLite vs. Core Data vs. Realm

如果你想开发一个能够快速运行并没有Bug的伟大应用,你就必须得仔细的考虑一下你的应用的各个方面。有这么一个你必须解决的方面是怎样存储和查询大数据,那么你就很可能会使用到数据库。在大...

oschina
2016/02/20
8.4K
17
那些在学习iOS开发前就应该知道的事(part 2)

英文原文:Things I wish I had known before starting iOS development—Part 2 如果你还没读这篇文章的第一部分,请先读完了再来看第二部分。 那些在学习iOS开发前就应该知道的事(part 1)...

TomatosX
2015/06/12
0
0
一步一步学习 iOS 6 编程(第四版)正式发布

所有范例程序及其截图都采用Xcode 4.4 和Xcode 4.5 最新版开发工具,本书包含了最新的iOS 6 开发技术,如自动布局(Auto Layout)、集合视图(Collection View)等等。 新增内容包括:分割视...

entlib
2012/10/25
0
2
Core Data 学习笔记 常用链接整理

目录 Core Data 学习笔记(一)框架简介 Core Data 学习笔记(二)被管理对象模型 Core Data 学习笔记(三)被管理对象 Core Data 学习笔记 应用示例 Core Data 学习笔记 常用链接整理 文章 ...

灰大羊
2015/07/31
0
0
iOS 开发中使用 Core Data 应避免的十个错误

Core Data是苹果针对Mac和iOS平台开发的一个框架,主要用来储存数据。对很多开发者来说,Core Data比较容易入手,但很难精通,如果没有正确的学习方法,你将很难真正理解它,更不用说精通了。...

oschina
2014/02/21
2.3K
5

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot 常用注解说明

实体类 @Entity (实体类注解) @Table(可指定表名) @Data(可缺省get/set) @Id (指定属性主键) @GeneratedValue(指定主键生成规则)

兜兜毛毛
今天
3
0
局域网能互相ping通,ubuntu虚拟机不能上外网

【问题】 桥接模式老是无法上网,查看本机IP发现被分配了一个私网地址,猜测应该是虚拟DHCP服务器没有打开,于是查看Ubuntu的网络配置: /etc/network/interfaces 发现没有dhcp配置的信息,只...

tahiti_aa
今天
2
0
以太坊助记词PHP开发包简介

以太坊助记词PHP开发包用来为PHP以太坊应用增加助记词和层级确定密钥支持能力。下载地址:以太坊助记词php开发包 。 1、开发包概述 以太坊助记词PHP开发包主要包括以下特性: 生成符合BIP39...

汇智网教程
昨天
2
0
系统监控-分布式调用链Skywalking

1. 为什么要使用分布式调用链技术? 随着公司业务的高速发展,公司服务之间的调用关系愈加复杂,如何理清并跟踪它们之间的调用关系就显的比较关键。线上每一个请求会经过多个业务系统,并产生...

秋日芒草
昨天
6
0
告诉自己的一些建议

摆脱学生心态 尽快发挥自己价值,让公司感知自己的存在,才是王道 选择比努力重要 自己附着的平台的经济体要是一个快速崛起的行业 转行趁早,年龄越大选择成本越高 趁早大量试错,学习新领域...

林怡丰
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部