亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Swift > 正文

Swift利用CoreData實現一個通訊錄存儲詳解

2020-03-09 17:43:13
字體:
來源:轉載
供稿:網友

前言

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

swift,coredata,使用,詳解

Core Data是iOS5之后才出現的一個數據持久化存儲框架,它提供了對象-關系映射(ORM)的功能,即能夠將對象轉化成數據,也能夠將保存在數據庫中的數據還原成對象。

雖然其底層也是由類似于SQL的技術來實現,但我們不需要編寫任何SQL語句,有點像Java開發中的Hibernate持久化框架

Core Data數據最終的存儲類型可以是:SQLite數據庫,XML,二進制,內存里,或自定義數據類型。

與SQLite區別:只能取出整個實體記錄,然后分解,之后才能得到實體的某個屬性。

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

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

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

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

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

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

最終實現結果:

swift,coredata,使用,詳解

1. Core Data架構

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

swift,coredata,使用,詳解

  • NSManagedObject是我們的數據模型,也就是我們存儲的對象。這些對象都保存在NSManagedObjectContext中,每個存儲對象都知道自己對應哪個上下文。
  • NSManagedObjectContext :日常打交道的都是這個。其他三個在數據遷移的時候才會看到。
  • NSPersistenStoreCoordinator :是模型和存儲數據庫之間的橋梁,負責兩者之間最復雜的細節隱藏。

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

Context是線程不安全的。

2. CoreData的基本讀取操作

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

  • 獲取總代理和托管對象總管
  • 從Entity獲取一個fetchRequest
  • 根據fetchRequest,從managedContext中查詢數據
  • 保存。保存過程中可能會出錯,要做一下處理。
  • 添加到數組中

2.2 基本存儲

  • 獲取總代理和托管對象總管
  • 建立一個Entity
  • 保存內容
  • 保存Entity到托管對象。如果保存失敗,進行處理
  • 保存到數組中,更新UI

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

  • 需求:完成一個通訊錄的列表頁。要求:
  • 從本地數據庫中讀取名字列表
  • 點擊增加可以添加一個名字
  • 添加的名字可以保存到本地數據庫中

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

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

swift,coredata,使用,詳解

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

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

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

3.2 創建本地數據庫模板

swift,coredata,使用,詳解

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

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

swift,coredata,使用,詳解

第一步,要添加一個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<NSFetchRequestResult>(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)}

所有的源代碼在這里

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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到swift教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97精品国产97久久久久久| 一区二区欧美亚洲| 国产视频精品自拍| 国产精品美女免费| www.日韩av.com| 中文字幕自拍vr一区二区三区| 亚洲bt欧美bt日本bt| 国产v综合v亚洲欧美久久| 亚洲激情中文字幕| 亚洲激情在线观看| 高清欧美一区二区三区| 奇米成人av国产一区二区三区| 亚洲视屏在线播放| 国产激情久久久| 国产精品香蕉在线观看| 久久亚洲精品网站| 亚洲理论电影网| 国产精品27p| 欧美激情乱人伦一区| 亚洲色图美腿丝袜| 日韩中文字幕网址| 韩国国内大量揄拍精品视频| 欧美日韩精品在线| 国产精品专区第二| 激情成人在线视频| 久久精品国产亚洲一区二区| 亚洲国产欧美一区二区三区久久| 国产精品精品国产| 久久久久久国产三级电影| 亚洲第一区中文字幕| 亚洲精品自拍第一页| 色哟哟亚洲精品一区二区| 亚洲韩国欧洲国产日产av| 成人av在线亚洲| 国产女人18毛片水18精品| 国产91在线视频| 性色av一区二区三区红粉影视| 国产欧美精品一区二区三区介绍| 97视频免费在线观看| 久久久久国产精品免费网站| 在线不卡国产精品| 久久精品视频播放| 亚洲最大的成人网| 日韩风俗一区 二区| 成人久久精品视频| 色播久久人人爽人人爽人人片视av| 久99九色视频在线观看| 欧美性猛交xxxx偷拍洗澡| 岛国av午夜精品| 亚洲精品中文字幕有码专区| 久久91精品国产91久久久| 久久全球大尺度高清视频| 国产精品免费久久久久久| 日韩最新中文字幕电影免费看| 国产成人精品免费视频| 欧美—级高清免费播放| 在线中文字幕日韩| 成人精品一区二区三区| 青青久久aⅴ北条麻妃| 91精品国产高清久久久久久91| 黄色成人在线播放| 国产精品人成电影| 国产亚洲精品久久| 国产精品网红直播| 亚洲a级在线播放观看| www.亚洲男人天堂| 欧美在线性视频| 美女黄色丝袜一区| 日韩专区在线观看| 亚洲最新av网址| 亚洲一区二区在线播放| www国产91| 久久中国妇女中文字幕| 91大神在线播放精品| 国产久一一精品| 欧美国产亚洲视频| 黄色一区二区在线观看| 大胆人体色综合| 日韩在线观看免费高清完整版| 欧美精品激情在线观看| 亚洲成人精品视频在线观看| 久久中文字幕一区| 亚州av一区二区| 亚洲成色www8888| 日本亚洲欧洲色α| 日产日韩在线亚洲欧美| 亚洲成色www8888| 欧美性生交大片免网| 最新国产成人av网站网址麻豆| 亚洲黄色av网站| 国产精品视频一| 精品国产一区二区三区久久| 亚洲欧美国产精品专区久久| 亚洲一区二区久久久| 欧美极品少妇xxxxⅹ免费视频| 欧美精品情趣视频| 国产精品久久久久av| 亚洲欧美日韩国产中文专区| 欧美韩日一区二区| 亚洲片国产一区一级在线观看| 亚洲丝袜一区在线| 日韩动漫免费观看电视剧高清| 日韩久久精品电影| 亚洲精品国产精品乱码不99按摩| 国产精品第一区| 亚洲精品国产综合区久久久久久久| 精品自拍视频在线观看| 国产成人aa精品一区在线播放| 欧美大秀在线观看| 久久精品亚洲94久久精品| 亚洲人线精品午夜| 羞羞色国产精品| 色青青草原桃花久久综合| 久久久久国色av免费观看性色| 日韩福利伦理影院免费| 欧美在线视频网站| 国产97在线观看| 国产精品久久久久久超碰| 欧美成人剧情片在线观看| 国产精品免费看久久久香蕉| 亚洲精品动漫久久久久| 亚洲欧美自拍一区| 日韩精品免费视频| 成人国内精品久久久久一区| 性色av一区二区三区在线观看| 久久国产精品99国产精| 欧美成人精品xxx| 欧美日韩国产综合视频在线观看中文| 97在线观看视频| 不卡伊人av在线播放| 久久久久久久久久久久久久久久久久av| 日韩高清不卡av| 蜜月aⅴ免费一区二区三区| 亚洲人av在线影院| 亚洲欧美日韩国产中文| 欧美精品成人91久久久久久久| 精品亚洲一区二区三区四区五区| 亚洲黄色www网站| 国产视频欧美视频| 欧美日韩亚洲精品一区二区三区| 国产精品久久久久久久久久久久| 国产精品久久久久久久久久东京| 2019最新中文字幕| 国产91在线高潮白浆在线观看| 91免费在线视频网站| 人体精品一二三区| 成人免费福利视频| 久久久免费观看| 国产精品视频1区| 国产精品日韩av| 亚洲成人精品在线| 大胆欧美人体视频| 97在线精品视频| 国产精品美女主播在线观看纯欲| 亚洲日韩欧美视频一区| 久久久精品久久| 另类少妇人与禽zozz0性伦| 日韩成人中文字幕| 91网站免费观看| 成人午夜高潮视频| 亚洲精品电影久久久| 午夜精品久久久久久久99热| 久久精品在线播放| 国产精品久久久久久网站|