一、iOS应用数据存取的常用方式

XML属性列表 —— PList

NSKeyedArchiver 归档

Preference(偏好设置)

SQLite3

Core Data

二、Core Data简介

Core Data 是iOS SDK 里的一个很强大的框架,允许程序员以面向对象的方式储存和管理数据。使用Core Data框架,程序员可以很轻松有效地通过面向对象的接口管理数据

Core Data框架提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite3数据库文件中,也能够将保存在数据库中的数据还原成OC对象

在数据操作过程中,无需编写任何SQL语句

要使用Core Data,需要导入CoreData框架

三、模型文件及实体(Entity)

要使用Code Data,首先需要定义模型文件,描述应用程序中的所有实体(Entities)

所谓实体,是跟数据库进行映射的对象

四、Core Data主要对象

NSManagedObjectContext:负责应用和数据库之间的交互(CRUD)

NSPersistentStoreCoordinator:添加持久化存储库(如SQLite数据库),是物理数据存储的物理文件和程序之间的联系的桥梁,负责管理不同对象上下文

NSManagedObjectModel:被管理的对象模型

NSEntityDescription:实体描述

五、打开数据库

// 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];

// 管理对象上下文

_context = [[NSManagedObjectContext alloc] init];

_context.persistentStoreCoordinator = store;

执行查询之后

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];

iOS基础 - 数据库CoreData的更多相关文章

  1. iOS基础 - 数据库-SQLite

    一.iOS应用数据存取的常用方式 XML属性列表 —— PList NSKeyedArchiver 归档 Preference(偏好设置) SQLite3 Core Data(以面向对象的方式操作数据 ...

  2. iOS - 基础知识总结(OC版) 面试必看 再不看就要用swift了

    OC的理解与特性 OC作为一门面向对象的语言,自然具有面向对象的语言特性:封装.继承.多态.它既具有静态语言的特性(如C++),又有动态语言的效率(动态绑定.动态加载等).总体来讲,OC确实是一门不错 ...

  3. [置顶] IOS 基础入门教程

    IOS 基础入门教程 教程列表: IOS 简介 IOS环境搭建 Objective C 基础知识 创建第一款iPhone应用程序 IOS操作(action)和输出口(Outlet) iOS - 委托( ...

  4. IOS基础学习-2: UIButton

    IOS基础学习-2: UIButton   UIButton是一个标准的UIControl控件,UIKit提供了一组控件:UISwitch开关.UIButton按钮.UISegmentedContro ...

  5. iOS开发数据库篇—SQLite简单介绍

    iOS开发数据库篇—SQLite简单介绍 一.离线缓存 在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据的离线缓存等. 说明:离线缓存一般都是把数据保存到项目的沙盒中.有以下几种方式 (1 ...

  6. iOS开发数据库篇—SQL

    iOS开发数据库篇—SQL 一.SQL语句 如果要在程序运行过程中操作数据库中的数据,那得先学会使用SQL语句 1.什么是SQL SQL(structured query language):结构化查 ...

  7. iOS开发数据库篇—SQL代码应用示例

    iOS开发数据库篇—SQL代码应用示例 一.使用代码的方式批量添加(导入)数据到数据库中 1.执行SQL语句在数据库中添加一条信息 插入一条数据的sql语句: 点击run执行语句之后,刷新数据 2.在 ...

  8. iOS开发数据库篇—SQLite的应用

    iOS开发数据库篇—SQLite的应用 一.简单说明 在iOS中使用SQLite3,首先要添加库文件libsqlite3.dylib和导入主头文件. 导入头文件,可以使用库中的函数(是纯C语言的) 二 ...

  9. IOS开发数据库篇—SQLite模糊查询

    IOS开发数据库篇—SQLite模糊查询 一.示例 说明:本文简单示例了SQLite的模糊查询 1.新建一个继承自NSObject的模型 该类中的代码: // // YYPerson.h // 03- ...

随机推荐

  1. Linux下的变化的主机名步骤

    Linux下变化的主机名gpdb 步骤1.执行vi /etc/sysconfig/network命令 NETWORKING=yesHOSTNAME=gpdb 第二步.执行hostname gpdb令 ...

  2. BST(Binary Search Tree)

    原文链接:http://blog.csdn.net/jarily/article/details/8679280 /****************************************** ...

  3. 离github在导入dubbo工程

    dubbo移动到github目前已经有一些时间,我们可能根本不习惯使用github.因此,我们仍然使用以前的版本号. 由于某些原因.阿里下载前关闭.在这里给大家提供一个私有地址: 链接:http:// ...

  4. Middleware详解

    Middleware详解 在第1章项目结构分析中,我们提到Startup.cs作为整个程序的入口点,等同于传统的Global.asax文件,即:用于初始化系统级的信息(例如,MVC中的路由配置).本章 ...

  5. sql server中的索引详情

    什么是索引 拿汉语字典的目录页(索引)打比方:正如汉语字典中的汉字按页存放一样,SQL Server中的数据记录也是按页存放的,每页容量一般为4K .为了加快查找的速度,汉语字(词)典一般都有按拼音. ...

  6. 拷贝构造函数,深拷贝,大约delete和default相关业务,explicit,给定初始类,构造函数和析构函数,成员函数和内联函数,关于记忆储存,默认参数,静态功能和正常功能,const功能,朋友

     1.拷贝构造 //拷贝构造的规则,有两种方式实现初始化. //1.一个是通过在后面:a(x),b(y)的方式实现初始化. //2.另外一种初始化的方式是直接在构造方法里面实现初始化. 案比例如以 ...

  7. AFNetworking3.0 POST请求

    // 请求管理者 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; manager.responseSerializer ...

  8. VirtualBox更改虚拟机磁盘VDI的大小

    流程虚拟机中使用,有时会遇到磁盘大小是不够的,假设一套"动态分配的内存".通过下面的方法来手动扩展磁盘空间. 1.启动CMD命令行.进入VirtualBox安装文件夹.例如 cd  ...

  9. NET中异常处理的最佳实践

    NET中异常处理的最佳实践 本文翻译自CodeProject上的一篇文章,原文地址. 目录 介绍 做最坏的打算 提前检查 不要信任外部数据 可信任的设备:摄像头.鼠标以及键盘 “写操作”同样可能失效 ...

  10. 递归与尾递归(C语言)

    原文:递归与尾递归(C语言)[转] 作者:archimedes 出处:http://www.cnblogs.com/archimedes/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留 ...