前言
我們在之前的兩篇里面實現了一個十分簡陋的通訊錄,而且都是通過系統默認的方式創建的CoreData。可是實際中哪里有那么好的事情嘛,要是忘記在創建工程的時候勾選了下面這個圖怎么辦?
難道我們要把工程刪除,再重新創建嘛?很多時候再開始工程的時候并特么的不知道需要用到數據庫啊。更多的時候已經都開始敲代碼了,連需求文檔都還木有拿到手里,PM只會輕輕的說一句:設計圖不是已經有了嘛,先畫UI吧。
所以,CoreData Stack是為了解決這個問題誕生的嘛?很遺憾,并不是??戳饲懊娴膬善恼轮?,有木有覺得CoreData不怎么好用,還挺麻煩的吶?這時候要祭出CoreData Stack的啦。
1. CoreData Stack的作用
其實這個東西在一篇的時候提到過,不信您看:Swift實踐:使用CoreData完成一個通訊錄存儲
一個基本的 Core Data 棧由四個主要部分組成:托管對象 (NSManagedObject),托管對象上下文 (NSManagedObjectContext),持久化存儲協調器 (NSPersistentStoreCoordinator),以及持久化存儲 (NSPersistentStore)。
CoreDataStack,是自定義的一個CoreData 的棧對象,可以通過它,初始化項目的CoreData,以及獲取到Context,對數據庫進行增刪改查等操作。
2.創建 CoreData Stack
非典型技術宅既然說了這貨有四部分組成,那咱們就一個一個來唄。艾瑪,因為發現文章會被抄襲,抄襲之后有些人還不署名,搞的只好在文章里面內嵌入一些自己的名字。心酸~~~~
2.1 iOS9
在iOS9中,CoreData Stack的三個核心類是這樣的:
-管理對象上下文NSManagedObjectContext
這個時候存儲是在Documents中間。
2.2 iOS10之后
iOS10之后就有點不一樣了, 增加了一個叫做NSPersistentContainer的東西。這個玩意兒作用就是用來管理CoreData Stack,為了能夠讓大家用起來更爽、更簡單。
需要說明的是,NSPersistentContainer 一點都沒有向下兼容的意思,完全不兼容iOS9.0,如果非要在iOS9.0里面使用,會直接閃退。
這個時候存儲是在Library->Application Support中。
2.3 來吧,開始創建吧
宅胖這么懶,怎么還可能再寫一個兼容iOS9.0的吶,想太多了~~~哈哈!所以,俺們只寫iOS10.0以后的。寫到這個時候,連版本號都已經寫煩了。
lazy var storeContainer: NSPersistentContainer = { let container = NSPersistentContainer(name: self.modelName) container.loadPersistentStores(completionHandler: { (storeDescription, error) in if let error = error as NSError? { debugPrint("Unclear error/(error)") } }) return container }() lazy var managedContext: NSManagedObjectContext = { return self.storeContainer.viewContext }() func saveContext() { guard managedContext.hasChanges else { return } do { try managedContext.save() } catch let error as NSError { debugPrint("Unclear error/(error)") } }
3. 一對多的關系
CoreData中實體管理關系是有三種的:1V1,1VN,NVN。咱們之前的兩個例子都是1V1。但是這個跟生活中不符啊,注意 例如一個人下了很多訂單,訂單里面又包含了很多商品。
如圖所示,Relationships表示管理關系的名稱,Destination表示目標表的名字,Inverse表示反向關系。
前面兩個都比較好理解,Inverse需要稍微多說一點點。如果沒有反向關系,就選擇No Inverse,但是蘋果官方建議為了保證數據之間的一致性,最好設置反向關系。
4. 完成Demo,了解使用CoreData Stack
然后咱們搞個小型本地化純良心自覺單機版的打卡器。這個打卡器用來管理員工的每次打卡時間。可以增加、刪除打卡時間。
完成后的效果圖:
思維導圖如下:
4. 補充:如果創建工程的時候遺忘了勾選使用CoreData怎么辦
如果忘選了也沒有關系,創建一個新的Data Model文件:
設置完數據庫之后,按照如下操作:
好啦,就會自動生成文件啦。
所有的源代碼都在這里:
github地址:https://github.com/Stanbai/CoreDataDemo.git
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。
新聞熱點
疑難解答