用Swfit重写CoreData官方CoreDataBooks(一)

前言

CoreDataBooks是官方提供给开发者使用CoreData的demo写的非常好,最近正在学习,正好想用Swift重写,这样既学习了Swfit又学习了CoreData,何乐而不为。

一、CoreData入门

CoreData,虽然名字里面有“data”这个单词但是它却是个 framework,用于管理程序中的 model层对象,主要用于数据的持久化。我们甚至不必知道什么是sqlite,就可以通过CoreData使用sqlite。官方说了使用了CoreData在操作model层时我们大概可以减少50%到70%的代码!但遗憾的是在使用前有几个不好理解的概念需要深入的理解,下面我们就一一的攻克它们。

(1)、ManagedObjectModel

英文描述:
Much of Core Data’s functionality depends on the schema you create to describe your application’s entities, their properties, and the relationships between them. Core Data uses a schema called a managed object model — an instance of NSManagedObjectModel. In general, the richer the model, the better Core Data is able to support your application. A managed object model allows Core Data to map from records in a persistent store to managed objects that you use in your application. The model is a collection of entity description objects (instances of NSEntityDescription). An entity description describes an entity (which you can think of as a table in a database) in terms of its name, the name of the class used to represent the entity in your application, and what properties (attributes and relationships) it has.
英文直译:
CoreData大部分的功能是通过拟创建的一种架构(schema)来实现的,这种架构创建出来是为了描述程序的实体(entity),实体的属性(properties),以及实体间的关系的。用ManagedObjectModel的实例来表示这种架构。ManagedObjectModel允许CoreData把记录从持久化缓存(persistent store)中映射到程序中的的ManagedObjectModel对象。ManagedObjectModel是一个实体描述类(instances of NSEntityDescription)的集合,实体描述类描述的是一个实体(entity),一个实体相当于数据库中的一个表(table),实体是ManagedObject的子类。
作者理解:
被管理的数据模型,代表CoreData中的模型文件,用来描述实体、实体的属性、实体间的关系的模型图。Xcode中可以可视化的创建很方便。

(2)、NSManagedObjectContext

以防我的翻译水平有限造成误解还是先贴出英文原句:
An instance of NSManagedObjectContext represents a single “object space” or scratch pad in an application. Its primary responsibility is to manage a collection of managed objects. These objects form a group of related model objects that represent an internally consistent view of one or more persistent stores. A single managed object instance exists in one and only one context, but multiple copies of an object can exist in different contexts. Thus object uniquing is scoped to a particular context.
英文直译:
一个NSManagedObjectContext实例代表了应用程序中的一个”对象空间“或者一个“便笺”,主要职责是管理由管理者对象组成的一个集合,这些管理者对象形成一组相关的模型对象,这些模型对象对应着一个或者多个持久存储区域里的视图,一个单一的托管对象(下面会讲到)可以在一个上下文中存在,但是也可以在多个上下文中存在。
作者理解:
NSManagedObjectContext就是一个“便笺”干脆是个“word”文档,把临时的数据拷贝到这个便笺上,然后就可以随意的“增”,“添”,“改”这些临时数据了,折腾完了还可以调用undo/redo功能。像不像我们打开一个word文档,然后写一些东西,发现好像写错了就点击一下”撤销“按钮返回到上一个状态,不小心多点了一下“撤销”按钮,没事我们还有个“重做”按钮。当一切ok了点击一下“保存”按钮,也就是进行了持久话存储,把临时数据进行了持久化。这样来看,上下文是存储在RAM中的,持久化数据是存储在磁盘中的。我们知道数据库是存储在磁盘中的,

(3)、NSPersistentStoreCoordinator

英文描述:
The NSPersistentStoreCoordinator sits in the middle of the Core Data stack. The coordinator is responsible for realizing instances of entities that are defined inside of the model. It creates new instances of the entities in the model, and it retrieves existing instances from a persistent store (NSPersistentStore). The persistent store can be on disk or in memory. Depending on the structure of the application, it is possible, although uncommon, to have more than one persistent store being coordinated by the NSPersistentStoreCoordinator. Whereas the NSManagedObjectModel defines the structure of the data, the NSPersistentStoreCoordinator realizes objects from the data in the persistent store and passes those objects off to the requesting NSManagedObjectContext. The NSPersistentStoreCoordinator also verifies that the data is in a consistent state that matches the definitions in the NSManagedObjectModel.
英文直译:
NSPersistentStoreCoordinator(持久化协调器)位于核心数据栈(Core Data stack)的中间层,协调器负责实现定义在ManagedObjectModel中的那些实体(entities),协调器创建新的实体,并且可以从持久化存储层(NSPersistentStore)获取已经存在的实体。NSPersistentStore根据app的结构可能存在于内存(memory)中也了能存在磁盘上(disk)。虽然很少见但是也存在一个NSPersistentStoreCoordinator协调着多个NSPersistentStore的现象。 然而NSManagedObjectModel确定了结构中的数据,NSPersistentStoreCoordinator实现了按照requesting条件把对象从NSPersistentStore中取出放到NSManagedObjectContext中。
作者理解:

说NSPersistentStoreCoordinator(持久化协调器)中心前还是先说说CoreDataStack(CoreData把很多组件绑定在一起,称为一个堆栈)吧,这个堆栈主要分为两个部分,这一部分是关于对象图管理,在这一层就是app中模型层逻辑(NSManagedObject)存在的地方,NSManagedObject存在一个context里面,CoreData里面可以有一个或者多个context相互独立的存在。另外一部分是持久化的地方,在这儿,CoreData从文件系统中读写操作,这儿有持久化存储器(persistent store),持久化存储器在文件系统中与sqlite进行交互,可以有多个持久化存储器,但是他们必须都属于同一个NSPersistentStoreCoordinator。 好吧,NSPersistentStoreCoordinator也就是这两部分的中间层,通过NSPersistentStoreCoordinator把对象图层管理部分和持久化部分绑定在一起,起到两部分交互的作用。
说了这么多,CoreData也基本可以入门了。持续更新中

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容

  • 本文是对 MagicalRecord github上的翻译 正文:注意: MagicalRecord 在 ARC...
    騂跃神话阅读 1,993评论 1 5
  • iOS CoreData介绍和使用(以及一些注意事项) 最近花了一点时间整理了一下CoreData,对于经常使用S...
    Pocket阅读 22,744评论 34 92
  • 我是一道影子,我怕黑 我怕失去痕迹,失去颜色 我也会流泪,虽然没有声音 就像我笑起来,所有的人却以为我快乐 我咧着...
    Angel乌安阅读 228评论 4 3
  • 一. 静态内存分析 所谓静态内存分析, 是指在程序没运行的时候, 通过工具对代码直接进行分析根据代码的上下文的语法...
    面糊阅读 984评论 0 50
  • 日总结0722 修身:跑步,看书 建功:发货,数据跟进 齐家: 拥有良好的生活习惯才能有好的精神状态,有好的状态才...
    隔世的风阅读 116评论 0 0