用Swfit重寫CoreData官方CoreDataBooks(一)

前言

CoreDataBooks是官方提供給開發(fā)者使用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大部分的功能是通過擬創(chuàng)建的一種架構(schema)來實現的,這種架構創(chuàng)建出來是為了描述程序的實體(entity),實體的屬性(properties)盈包,以及實體間的關系的沸呐。用ManagedObjectModel的實例來表示這種架構。ManagedObjectModel允許CoreData把記錄從持久化緩存(persistent store)中映射到程序中的的ManagedObjectModel對象呢燥。ManagedObjectModel是一個實體描述類(instances of NSEntityDescription)的集合崭添,實體描述類描述的是一個實體(entity),一個實體相當于數據庫中的一個表(table)叛氨,實體是ManagedObject的子類呼渣。
作者理解:
被管理的數據模型,代表CoreData中的模型文件力试,用來描述實體徙邻、實體的屬性、實體間的關系的模型圖畸裳。Xcode中可以可視化的創(chuàng)建很方便缰犁。

(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實例代表了應用程序中的一個”對象空間“或者一個“便箋”怖糊,主要職責是管理由管理者對象組成的一個集合帅容,這些管理者對象形成一組相關的模型對象,這些模型對象對應著一個或者多個持久存儲區(qū)域里的視圖伍伤,一個單一的托管對象(下面會講到)可以在一個上下文中存在并徘,但是也可以在多個上下文中存在。
作者理解:
NSManagedObjectContext就是一個“便箋”干脆是個“word”文檔扰魂,把臨時的數據拷貝到這個便箋上麦乞,然后就可以隨意的“增”,“添”劝评,“改”這些臨時數據了姐直,折騰完了還可以調用undo/redo功能。像不像我們打開一個word文檔蒋畜,然后寫一些東西声畏,發(fā)現好像寫錯了就點擊一下”撤銷“按鈕返回到上一個狀態(tài),不小心多點了一下“撤銷”按鈕姻成,沒事我們還有個“重做”按鈕插龄。當一切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(持久化協(xié)調器)位于核心數據棧(Core Data stack)的中間層真椿,協(xié)調器負責實現定義在ManagedObjectModel中的那些實體(entities)鹃答,協(xié)調器創(chuàng)建新的實體,并且可以從持久化存儲層(NSPersistentStore)獲取已經存在的實體突硝。NSPersistentStore根據app的結構可能存在于內存(memory)中也了能存在磁盤上(disk)测摔。雖然很少見但是也存在一個NSPersistentStoreCoordinator協(xié)調著多個NSPersistentStore的現象丘喻。 然而NSManagedObjectModel確定了結構中的數據钦讳,NSPersistentStoreCoordinator實現了按照requesting條件把對象從NSPersistentStore中取出放到NSManagedObjectContext中。
作者理解:

說NSPersistentStoreCoordinator(持久化協(xié)調器)中心前還是先說說CoreDataStack(CoreData把很多組件綁定在一起芹助,稱為一個堆棧)吧护盈,這個堆棧主要分為兩個部分挟纱,這一部分是關于對象圖管理,在這一層就是app中模型層邏輯(NSManagedObject)存在的地方腐宋,NSManagedObject存在一個context里面紊服,CoreData里面可以有一個或者多個context相互獨立的存在。另外一部分是持久化的地方胸竞,在這兒欺嗤,CoreData從文件系統(tǒng)中讀寫操作,這兒有持久化存儲器(persistent store)卫枝,持久化存儲器在文件系統(tǒng)中與sqlite進行交互煎饼,可以有多個持久化存儲器,但是他們必須都屬于同一個NSPersistentStoreCoordinator校赤。 好吧吆玖,NSPersistentStoreCoordinator也就是這兩部分的中間層,通過NSPersistentStoreCoordinator把對象圖層管理部分和持久化部分綁定在一起马篮,起到兩部分交互的作用沾乘。
說了這么多,CoreData也基本可以入門了积蔚。持續(xù)更新中

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市烦周,隨后出現的幾起案子尽爆,更是在濱河造成了極大的恐慌,老刑警劉巖读慎,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件漱贱,死亡現場離奇詭異,居然都是意外死亡夭委,警方通過查閱死者的電腦和手機幅狮,發(fā)現死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人崇摄,你說我怎么就攤上這事擎值。” “怎么了逐抑?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵鸠儿,是天一觀的道長。 經常有香客問我厕氨,道長进每,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任命斧,我火速辦了婚禮田晚,結果婚禮上,老公的妹妹穿的比我還像新娘国葬。我一直安慰自己贤徒,他們只是感情好,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布胃惜。 她就那樣靜靜地躺著泞莉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪船殉。 梳的紋絲不亂的頭發(fā)上鲫趁,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天,我揣著相機與錄音利虫,去河邊找鬼挨厚。 笑死,一個胖子當著我的面吹牛糠惫,可吹牛的內容都是我干的疫剃。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼硼讽,長吁一口氣:“原來是場噩夢啊……” “哼巢价!你這毒婦竟也來了?” 一聲冷哼從身側響起固阁,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤壤躲,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后备燃,有當地人在樹林里發(fā)現了一具尸體碉克,經...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年并齐,在試婚紗的時候發(fā)現自己被綠了漏麦。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片客税。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖撕贞,靈堂內的尸體忽然破棺而出更耻,到底是詐尸還是另有隱情,我是刑警寧澤麻掸,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布酥夭,位于F島的核電站,受9級特大地震影響脊奋,放射性物質發(fā)生泄漏熬北。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一诚隙、第九天 我趴在偏房一處隱蔽的房頂上張望讶隐。 院中可真熱鬧,春花似錦久又、人聲如沸巫延。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽炉峰。三九已至,卻和暖如春脉执,著一層夾襖步出監(jiān)牢的瞬間疼阔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工半夷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留婆廊,地道東北人。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓巫橄,卻偏偏與公主長得像淘邻,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子湘换,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內容

  • 本文是對 MagicalRecord github上的翻譯 正文:注意: MagicalRecord 在 ARC...
    騂躍神話閱讀 2,006評論 1 5
  • iOS CoreData介紹和使用(以及一些注意事項) 最近花了一點時間整理了一下CoreData宾舅,對于經常使用S...
    Pocket閱讀 22,906評論 34 92
  • 我是一道影子,我怕黑 我怕失去痕跡彩倚,失去顏色 我也會流淚筹我,雖然沒有聲音 就像我笑起來,所有的人卻以為我快樂 我咧著...
    Angel烏安閱讀 234評論 4 3
  • 一. 靜態(tài)內存分析 所謂靜態(tài)內存分析, 是指在程序沒運行的時候, 通過工具對代碼直接進行分析根據代碼的上下文的語法...
    面糊閱讀 995評論 0 50
  • 日總結0722 修身:跑步署恍,看書 建功:發(fā)貨崎溃,數據跟進 齊家: 擁有良好的生活習慣才能有好的精神狀態(tài)蜻直,有好的狀態(tài)才...
    隔世的風閱讀 118評論 0 0