Core Data by tutorials 筆記(一)

2018-02-24 15:54 更新

原文出處: http://chengway.in/post/ji-zhu/core-data-by-tutorials-bi-ji

最近花了半個月讀完了Raywenderlich家的《Core Data by Tutorials》,接下來幾天就做個回顧,筆記并不是對原書的簡單翻譯,算是對整個知識脈絡的一個整理的過程吧:)

Update:?上周去搞Sketch了,工具算是基本入門了,抄了幾個圖標,畫了幾個圖,以后會再聊聊。好了,進入正題吧,今天打算介紹前三章,也是CoreData的最基礎的部分。***

Chapter 1:Your First Core Data App

第一章比較簡單,主要是帶你熟悉CoreData的用法,并用CoreData創(chuàng)建了一個簡單的List APP,學完這章你能加滿如下技能點:

  • model data you want to store in Core Data using Xcode’s model editor;
  • add new records to Core Data;
  • fetch a set of records from Core Data;
  • display the fetched results to the user in a table view.

第一章按順序大致如下:

一、Getting started

作者提供了一個Start Project,打開其實就是一個UITableViewController,你需要做的就是增加一個addName方法,這里使用了UIAlertController這個iOS 8新添加的方法來做數(shù)據(jù)的添加邏輯,使用起來也很優(yōu)雅。

二、Modeling your data

這個主要是根據(jù)你的數(shù)據(jù)模型創(chuàng)建對應的managed object model,主要操作也在.xcdatamodeld中進行,全GUI操作,沒什么難度。

You can think of a Core Data entity as a class “definition” and the managed object as an instance of that class.
這里作者用了面向對象的思想做了類比,雖然不是很準確,但也方便初學者理解。

三、Saving to Core Data

這里要注意到NSManagedObject的“對象”其實是遵循“KVC”的,NSManagedObject對象的值改變后,在ManagedContext中進行save操作。

四、Fetching from Core Data

創(chuàng)建一個NSFetchRequest對象,設置好各種條件,依舊是交給ManagedContext對象去執(zhí)行。下面是作者描述了兩種fetch失敗的情況

If there are no objects that match the fetch request’s criteria, the method returns an optional value containing an empty array.
If an error occurred during the fetch, the method returns an optional value that contains nil. If this happens, you can inspect the NSError and respond appropriately.

第一章到此結束:)


Chapter 2:NSManagedObject Subclasses

NSManagedObject上一章我們提到過,要存取屬性,只能用KVC,使用起來既不安全也不符合面向對象的原則,所以我們這章要生成他的子類,來創(chuàng)建我們自己的屬性,這樣就又能愉快地使用"."語法啦。

第二章的大致順序如下:

一、Getting started

作者提供了一個“挑選領結”的Start Project,領結數(shù)據(jù)存放在plist文件中,同樣是一個很簡單的App。

二、Modeling your data

打開xcdatamodeld文件進行編輯,添加屬性。這里主要看一下Binary DataTransformable兩種類型:

  • Binary Data這里將image對象保存成了二進制文件,當然任何可以序列化的對象其實都可以保存成二進制。這里作者強調了性能問題,如果將一個很大的二進制保存到SQLite數(shù)據(jù)庫中很可能會產(chǎn)生卡頓等問題。當然,幸運的是Core Data提供了一種叫Allows External Storage的解決方式,他只對binary data的屬性類型有效,你只需要簡單的開啟他就好了。

    When you enable Allows External Storage, Core Data heuristically decides on a per-value basis if it should save the data directly in the database or store a URI that points to a separate file.

  • Transformable除了一些基本屬性,如果一個對象遵循NSCoding Protocol,那么這個對象是可以選擇使用transformable類型的,作者這里使用的是UIColor類型,遵循NSSecureCoding協(xié)議,而該協(xié)議又繼承自NSCoding,所以設為Transformable是OK的。自定義的類想要設置為Transformable,那么你首先要實現(xiàn)NSCoding protocol

三、Managed object subclasses

在Xcode中選擇Editor\Create NSManagedObject Subclass創(chuàng)建managedObject對象的子類,這里注意下Map Model中的attribute type與實際子類對象中的屬性的對應關系就好了

  • String maps to String
  • Integer 16/32/64, Float, Double and Boolean map to NSNumber
  • Decimal maps to NSDecimalNumber
  • Date maps to NSDate
  • Binary data maps to NSData
  • Transformable maps to AnyObject

當然如果你想保留Map Model中的原始基本類型,那么在創(chuàng)建NSManagedObject Subclass時要勾選Use scalar properties for primitive data types

Similar to @dynamic in Objective-C, the @NSManaged attribute informs the Swift compiler that the backing store and implementation of a property will be provided at runtime instead of at compile time.
這里注意下兩種語言的一點區(qū)別

創(chuàng)建完子類還要記得一點就是在Model中的Attributes inspectorclass name設為你新生成的子類路徑,完成這一步主要是為了在runtime時將managed object subclass與Model中的entity鏈接起來。(有點類似與在SB中創(chuàng)建一個VC,并設置他的custom class)。

四、Propagating a managed context

因為Xcode默認的CoreData模板會將context在AppDelegate中創(chuàng)建,所以,就會有這種獲取context的做法:

 let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate 

但這種做法還是不推薦使用,較好的方法是能夠在對象的的初始化中將context作為參數(shù)進行傳遞。
接下來,作者從plist中將數(shù)據(jù)通過子類對象導入到core data中,再對界面做了些操作,這都比較簡單。

五、Data validation in Core Data

數(shù)據(jù)校驗這里可以在data model inspector 中設置最大最小值,如果出錯會在context save的時候將錯誤信息傳給error參數(shù)

第二章到此結束:)


Chapter 3:The Core Data Stack

Core Data要正常運行,需要幾個組件共同協(xié)作來完成,這些組件包括:

  • NSManagedObjectModel
  • NSPersistentStore
  • NSPersistentStoreCoordinator
  • NSManagedObjectContext

這些組件共同構成了Core Data Stack,組件間的關系我覺得用蘋果官方提供的一張圖來展示最好不過了

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號