成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Swift實踐:使用CoreData完成一個通訊錄存儲

新聞 移動開發
CoreData作為Apple的親兒子,依然在App需要存儲結構化數據上發揮著重要的作用。

CoreData作為Apple的親兒子,依然在App需要存儲結構化數據上發揮著重要的作用。CoreData已經超過十年了,而且親爹還在積極的維護著它。

[[202547]]

在Monster、Indeed這些海外主流招聘網站看一下iOS的職位,基本上都會大大寫著要求會熟練使用CoreData。

然而這么一個成熟,被實踐檢驗過的代碼庫反而在國內使用并不是特別多。FMDB、Realm等等在被廣泛使用。經常在面試的時候問iOSer是不是了解數據庫,回答都是了解。再一細問,很多人也都是只使用到了FMDB,對于CoreData卻是了解甚少。

后來想了想,可能是因為CoreData的入門成本有點高,而且相關的中文資料比較少的緣故吧。

為了寫這個系列,還專門買來了objc.io的CoreData這本書。讀完之后受益匪淺。

這個系列要寫多少篇還沒有想好,大概也還是會從基本到高級的一個過渡。

第一篇通過一個通訊錄實現數據庫的讀取。第二篇會存儲更多類型的數據。

最終實現結果:

CoreDataDemo.gif

1. Core Data架構

一個基本的 Core Data 棧由四個主要部分組成:托管對象 (NSManagedObject),托管對象上下文 (NSManagedObjectContext),持久化存儲協調器 (NSPersistentStoreCoordinator),以及持久化存儲 (NSPersistentStore)。

  • NSManagedObject是我們的數據模型,也就是我們存儲的對象。這些對象都保存在NSManagedObjectContext中,每個存儲對象都知道自己對應哪個上下文。

  • NSManagedObjectContext :日常打交道的都是這個。其他三個在數據遷移的時候才會看到。

  • NSPersistenStoreCoordinator :

    是模型和存儲數據庫之間的橋梁,負責兩者之間最復雜的細節隱藏。

關于Context想多說點,因為是天天都打交道的嘛。它其實是內存中的一塊區域,對象所有的操作都需要一個context。直到save之前,都是在內存中,不會對數據庫中的內容有任何影響。每一個托管對象都對應一個Context,一個對象只會跟一個特定的Context打交道。直到生命周期結束。

2. CoreData的基本讀取操作

2. 1 獲取CoreData已經保存數據的五個步驟

  1. 獲取總代理和托管對象總管

  2. 從Entity獲取一個fetchRequest

  3. 根據fetchRequest,從managedContext中查詢數據

  4. 保存。保存過程中可能會出錯,要做一下處理。

  5. 添加到數組中

2.2 基本存儲

  • 獲取總代理和托管對象總管

  • 建立一個Entity

  • 保存內容

  • 保存Entity到托管對象。如果保存失敗,進行處理

  • 保存到數組中,更新UI

3. 更新一個通訊錄的列表頁Demo

需求:完成一個通訊錄的列表頁。要求:

  1. 從本地數據庫中讀取名字列表

  2. 點擊增加可以添加一個名字

  3. 添加的名字可以保存到本地數據庫中

好,接下來咱們來一步一步實現這個需求。為了突出重點,咱們先從最簡單的開始,使用默認帶數據庫的工程進行著手。

3.1 Xcode創建默認帶數據庫的工程

在 Xcode 創建工程時,提供了創建 CoreData 的模板,只需要我們在創建時,勾選 CoreData 選項,Xcode 就會自動創建出數據模型文件。

這個Demo用這個創建,純粹是為了簡單直奔主題。不然還要一開始分享很多其他的內容,看官們會覺得膩的。

但是,實際開發中不建議使用這種方式創建。通常情況下我們都會把生成的模板代碼都刪除的。

3.2 創建本地數據庫模板

勾選完成之后,會看到一個后綴名是"xcdatamodeld"的文件,這個就是咱們的數據庫模板啦。

當然,現在里面是還不能存數據的,還需要我們設置一下字段名稱。

  • 第一步,要添加一個Entity,這個就相當于是數據庫中的一張表。

  • 第二步,對新建的Entity命名。

  • 第三步,設計Entity里面的屬性。咱們這個Demo的需求里面只需要一個人名,所以就只設置了一個名字叫做name的屬性,類型是String。

其他更多的屬性類型,我們會在下面一篇文章分享。

3.3 查詢本地數據

咦?在最開始的不是說一個基本的 Core Data 棧由四個主要部分組成嘛?怎么沒有看到吶?

來來來,這就是最開始我們使用Xcode創建默認帶數據庫的工程的原因。使用了這個選項,會自動的在AppDelegate中生成相應的代碼。確實簡化了咱們第一次學習的成本,但是就像沒人會把所有代碼都寫在Controller里面一樣,在APPDelegate也不會寫這些東西。

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        //        步驟一:獲取總代理和托管對象總管
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        
        let managedObectContext = appDelegate.persistentContainer.viewContext
        
//        步驟二:建立一個獲取的請求
        let fetchRequest = NSFetchRequest

        (entityName: "Person")          //        步驟三:執行請求         do {             let fetchedResults = try managedObectContext.fetch(fetchRequest) as? [NSManagedObject]             if let results = fetchedResults {                 people = results                                  tableView.reloadData()             }                     } catch  {             fatalError("獲取失敗")         }     }    

3.4 插入并保存數據至本地數據庫

private func saveName(text: String) {
    //        步驟一:獲取總代理和托管對象總管
    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    
    let managedObectContext = appDelegate.persistentContainer.viewContext
    
    //        步驟二:建立一個entity
    let entity = NSEntityDescription.entity(forEntityName: "Person", in: managedObectContext)
    
    let person = NSManagedObject(entity: entity!, insertInto: managedObectContext)
    
    //        步驟三:保存文本框中的值到person
    person.setValue(text, forKey: "name")
    
    //        步驟四:保存entity到托管對象中。如果保存失敗,進行處理
    do {
        try managedObectContext.save()
    } catch  {
        fatalError("無法保存")
    }
    
    //        步驟五:保存到數組中,更新UI
    people.append(person)
}

所有的源代碼在這里哈:

https://github.com/Stanbai/CoreDataDemo.git

Swift之CoreData系列之一:基礎存儲

  • 作者:非典型技術宅

  • 鏈接:http://www.jianshu.com/p/3e793fca6a13

  • 來源:簡書

  • 著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

責任編輯:張燕妮 來源: 簡書
相關推薦

2011-09-05 14:08:21

微信Andriod安卓

2011-09-16 14:05:42

Andrioid應用iPhone應用Symbian應用

2022-01-04 15:34:31

鴻蒙HarmonyOS應用

2021-12-10 10:12:44

鴻蒙HarmonyOS應用

2011-07-19 17:25:14

jQuery MobiAndroid

2012-02-09 09:10:44

Path通訊錄隱私

2010-06-18 22:42:42

智能手機平臺Android網秦

2013-03-18 10:19:27

安卓軟件手機通訊錄隱私信息

2012-06-05 13:53:03

天天聯系華為

2011-07-20 08:49:24

jQuery MobiAndroid

2010-09-26 08:35:01

火種通訊錄

2012-12-21 14:51:52

手機中國

2010-09-08 23:11:01

2021-12-14 09:00:42

Swift HTTP 代理服務器

2015-07-30 15:58:15

EC企信企業即時通訊

2010-05-12 14:42:20

2014-09-24 10:29:14

微信企業號開發

2011-08-12 10:16:10

iPhone通訊錄聯系人

2011-11-28 14:37:32

點心通訊錄

2012-01-09 16:43:13

點心通訊錄
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91久久精品国产91久久性色tv | 国产精品99精品久久免费 | aaa大片免费观看 | 欧美亚洲高清 | 国内久久 | 欧美一级在线观看 | 一区二区三区成人 | 一级毛片视频在线 | 黄色免费网站在线看 | 亚洲视频免费在线观看 | 国产精品中文字幕一区二区三区 | 成人久草 | 欧美福利影院 | 91精品国产91久久久久久丝袜 | 中文字幕av亚洲精品一部二部 | 亚洲影视在线 | 日韩欧美福利视频 | 一级毛片视频在线观看 | 成人av免费 | 在线视频一区二区三区 | 亚洲国产69 | 国产成人啪免费观看软件 | 久久久国产精品一区 | 成人av免费| 国产精品18hdxxxⅹ在线 | 国产日韩精品一区 | 91视频在线看 | 99久热在线精品视频观看 | 成人av播放| 国产精品久久久久一区二区三区 | 一区二区三区av夏目彩春 | 国产视频久久久 | 亚洲 中文 欧美 日韩 在线观看 | 精品国产三级 | 另类二区| 久久久久久91 | 精品一区二区三区中文字幕 | 国产视频中文字幕 | 成av在线 | 狠狠天天| 亚洲免费精品 |