Coredata第一课 认识coredata

问题

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

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

时间: 2024-11-23 06:41:31

Coredata第一课 认识coredata的相关文章

sql第一课笔记

这是我看了imooc的视频教程之后重新写的笔记. 虽然之前也是学习过SQL Server数据库,但是也是忘记得差不多了.现在重新捡起来,安装一次数据库练习,使用的是mysql. 第一课是最简单的创建,修改,查看,删除数据库: mysql 有密码之后在命令行登陆 用的是 shell>mysql -u root -p; 提示输入密码: 登陆成功之后,把提示符mysql变成以当前计算机帐户名@主机名 当前数据库的格式:prompt \[email protected]\h \d> prompt命令下

OpenCV 第一课(安装与配置)

OpenCV 第一课(安装与配置) win10,opencv-2.4.13, 安装, vs2013, 配置 下载安装软件 官网OpenCV下载地址下载最新版本,我下载的是opencv.2.4.13,然后解压安装,我写的路径是D:\Program Files.注意本文中绿色标注的要换成你自己的安装路径. 这里得说一点,可能是因为网速太差的原因,昨天晚上下载了几次安装时都提示说"cannott open file'opencv-2.4.13.exe' as archive".我当时一直不明

读书笔记 - 《格鲁夫给经理人的第一课》

这本书对我的启发远远超过其它的企业管理类图书,不愧是资深前辈写的书.虽然名为第一课,实际上对于中层经理人来说,已经不再需要第二课了.这本书从简单的早餐店开始,讲解了管理杠杆率.开会.决策.规划.矩阵组织.激励.绩效.招人.薪酬.培训,以浅显的语言讲解了几乎是一个中层经理人所需理解的全部工作,使我对工作的认识有了大幅度提高,已经基本可以摆脱漫无头绪的状态!这本书准备丢在公司,没事就翻看思考一下,在实践中继续深入领悟!

VC++编程之第一课笔记

第一课 Windows程序内部运行原理 API 操作系统把它所能够完成的功能以函数的形式提供给应用程序使用,应用程序对这些函数的调用就叫做系统调用.这些函数的集合就是Windows操作系统提供给应用程序编程的接口(Application Programming Interface),简称Windows API. 如Create Window就是一个API函数,应用程序调用这个函数,操作系统就会按照该函数提供的参数信息产生一个相应的窗口. MSG(消息结构体) 结构体定义如下: typedef s

EasyUI入门第一课

首先下载easyUI,最好是最新的,然后新建一个空web程序或是网站,不废话,代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="JqueryEasyUI.WebForm1" %> <!DOCTYPE html> <html xmlns="http://ww

第一课 C语言简明教程

1序言: 1与Java.C#等高级语言相比,C语言却非常简单,学习简单,使用也简单,但是也非常重要,到目前为止基本上操作系统的内核代码超过百分之九十使用C语言完成,因此学好C语言是学好计算机这门课程的基础,特别是进入系统编程尤为明显. 今天是本人复习C语言课程的第一课,主要重新记录一下C语言的基础知识,这节课涉及到C语言的结构.变量以及类型.输入输出.条件判断以及循环知识. 2知识点: 2.1 C语言的结构 2.1.1 通常情况下C语言程序是由: 1.相关的代码注释,使用/* ··· */可注释

微积分重点 第一课至第四课

1.微积分是关于两个函数间关系的学问 例如, 距离与速度的关系  f(t)  --- df/dt 高度与斜率的关系  y(x)  ---- dy/dx 函数1--->函数2:   求斜率 函数2--->函数1:   求面积,乘以自变量 两条曲线不同,但是包含了相同的信息 函数2表示了函数1在某一瞬间的变化率 2.导数的总览和计算 三个重要的基本函数:幂函数 三角函数 指数函数 求导过程: Δy/Δx 无限逼近取极限 就得到了 dy/dx sinx 在零点处斜率逼近1, 在pi/2处斜率为零,

第一课: 认识linux, 安装虚拟机和安装centOS 7

这是关于linux 学习的第一课 一周第一次课(5月26日)1.1 学习之初1.2 约定1.3 认识Linux1.4 安装虚拟机1.5 安装centos7资源:keepass.com  记录密码工具各种软件版本更新r.aminglinux.com课程用到的密码及命令老师: coding.net 课程用到的代码及命令centos7.aminglinux.comLINUX 应用Linux 是一个操作系统,Android 就是其一运行PPT,浏览网站,玩游戏等网站,游戏,QQ, 微信LInux起源:之

html第一课

第一段: <!DOCTYPE HTML> <!--html5--> <html> <heda> <meta charset="GB2312">   <!--设置字符集--> <title>html第一课</title> </heda> <body> <img src = "c.gif" width="400" height