在项目中创建和使用Core Data

本文详细介绍了Core Data的基本概念、核心组件以及如何在项目中创建和使用Core Data,包括受控对象模型、持久化存储调度器、受控对象上下文的操作。Core Data是一种关系-对象映射解决方案,用于数据管理,它会自动将结果数据包装成应用中的模型对象。通过创建对象模型、持久化存储调度器、存储和上下文,开发者可以在iOS应用中构建和操作数据。
摘要由CSDN通过智能技术生成

Core Data包含的内容非常丰富,这篇文章是关于Core Data的比较基础和常用的内容;包括Core Data的组成,和如何在应用中构建和使用Core Data。主要包括以下内容:

  • 什么是Core Data
  • Core Data 栈
  • 建立一个Core Data驱动的应用
  • 使用Core Data操作数据

1、什么是Core Data

Core Data是一种基于数据模型的数据管理解决方案,是苹果提供的关系-对象映射的原生解决方案。在iOS系统架构中位于核心服务层,使用接口是一组Objective-C的类;它是设计用来与MVC设计模式协同工作的,部分工作可以用图形化的方式进行编辑;

不同于关系型数据库,Core Data并不在意值,它关注的是对象;从Core Data中取出信息时,它会创建并返回一个装有受控对象的数组。Core Data会自动对结果数据的值进行包装,封装成应用中使用的模型对象,然后将这些对象当作获取操作的结果返回。


2、Core Data栈

Core Data栈可由下面的Core Data架构示意图展示,下图将Core Data栈中的各种参与者以及它们之间的互动展示出来,描述了Core Data的工作过程。Core Data栈是由以下内容构成的:

  • 受控对象模型
  • 持久化存储调度器
  • 持久化存储和存储文件
  • 受控对象上下文

示意图

2.1、受控对象模型

受控对象模型(managed object model),简称对象模型,负责定义应用中的数据结构。对象模型存储在可视化文件中,扩展名为.xcdatamodeld。它可以用一个图形化界面工具来编辑,即Core Data数据模型编辑器(见下图)。

Core Date GUI

在上图中显示了Core Data模型编辑器的工作区界面,图中对象模型定义了一个Person实体,实体包含了几个简单的属性。

在一个受控对象模型中,每个对象(Objective-C类)都被称为一个实体(entity)。每个实体都有自己单独的一个列表,其中列出了属性(attribute)、关系(relationship)、和衍生属性(fetched property)。
可以将属性(attribute)看作是自己定义对象时使用的实例属性,如上图中的id、name等。关系定义了单个实体彼此之间的联系。
派生属性也表示了对象模型中实体间的联系。关系和派生属性的区别在于,关系是双向的(双方对象都知道关系的存在),而派生属性只是单向的。

在图形工作区创建完对象模型之后,就可以用Xcode来自动生成受控对象类了。在Xcode的菜单中新建文件,在新建的对话框中选择Core Data文件类型,选择NSManagedObject作为基类并单击Next(见下图)。之后,可以在对话框中选择所有需要创建对象类的实体,之后,就可以生成这些子类了,生成的类包括选中的实体类(如Person类),还有实体和Core Data属性相关的分类。

新建受控对象

2.2、持久化存储调度器

Core Data栈中,其次重要的元素就是持久化存储调度器。通过受控对象模型,可以创建一个持久化存储调度器。这个对象模型定义的实体和关系会受该调度器的管理。

持久化存储调度器在Core Data中基本上是一个自动的过程。除了一开始的创建过程之外,在应用的整个生命周期中,并不需要操作这个调度器。大多数使用core data的iOS应用,都是围绕单个数据库设计的。

但是如果一个应用拥有多个存储文件,调度器的用处就会凸显出来,它会管理底层的存储,而给开发者提供一个单一的受控对象上下文,使得使用起来更方便。

2.3、持久化存储和存储文件

在使用Core Data时,需要在文件系统中创建一个新的数据库文件的持久化存储。持久化存储其实就是对实际的数据库文件的一种Objective-C的表示方式。不用自己去创建新的持久化存储,只要确定了存储类型、配置、URL和选项之后,就可以将新的持久化存储直接添加到一个已有的调度器中。

下面的代码创建了一个新的持久化存储:

    //获取沙盒document路径
    NSString *documentPath =  [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    //为数据库文件创建一个URL
    NSURL *storeURL = [[NSURL URLWithString:documentPath] URLByAppendingPathComponent:@"DemoCoreData.sqlite"];
   //创建持久化存储
    NSError *error = nil;
    NSPersistentStore *store;
   //coordinator为NSPersistentStoreCoordinator的对象,属于持久化存储调度器
    store = [coordinato
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值