国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Swift > 正文

Swift利用CoreData如何存儲多種數據類的通訊錄

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

前言

我們在上一篇文章簡單的實現了一個通訊錄,說是通訊錄實際上就只是一個簡簡單單的Name List。這次我們要往這個通訊錄里面加入更多的元素,目的也是為了學習CoreData如何存儲更多的數據類型。下面話不多說了,來隨著小編一起看看詳細的介紹吧。

完成后的效果:

swift,coredata,使用,coredata教程

1. CoreData支持存儲數據類型

swift,coredata,使用,coredata教程

咦?這里面有兩個好像很少看到的類型:Binary Data、Decimal、Transformable。這些都是神馬東西?

1.1 Binary Data

顧名思義,就是二進制數據。對應到OC中就是NSData, Swift里面就是Data數據類型。

我們這次就試試在通訊里面存儲一下圖片,把圖片變成Binary Data進行存儲。

1.2 Decimal

Decimal為SQL Server、MySql等數據庫的一種數據類型,不屬于浮點數類型,可以在定義時劃定整數部分以及小數部分的位數。使用精確小數類型不僅能夠保證數據計算更為精確,還可以節省儲存空間。

Decimal(n,m)表示數值中共有n位數,其中整數n-m位,小數m位。例:decimal(10,6),數值中共有10位數,其中整數占4位,小數占6位。

問題來了,Decimal(2,1):

1, 插入數據“12”會怎樣?

會出現數據移除的錯誤。

2, 插入”1.2345“會怎樣?

會自動四舍五入成1.2

3, 插入2,會怎樣?

會自動補充成2.0,以確保2位的有效長度和1位的小數。

1.3 Transformable

這個類型就比較搞了,有人說它是萬能類型,有人說它只要是對象就都可以。

在官方文檔里面,Core Data Release Notes for OS X v10.5 是這么介紹的:

Transformable Attributes
There's a new "transformable" type for NSManagedObject attributes that allows you more easily support attribute types that Core Data doesn't support natively. You access an attribute as a non-standard type, but behind the scenes Core Data uses an instance of NSValueTransformer to convert the attribute to and from an instance of NSData. Core Data then stores the data instance to the persistent store.

If you don't specify a transformer, transformable attributes to use keyed archiving (NSKeyedUnarchiveFromDataTransformerName).

For more details, see Non-Standard Persistent Attributes.

說到底,這是一個非標準的類型。在中文中,非典型技術宅胖其實覺得翻譯成“其他”類型更貼切。哈哈~~就和有關部門一樣d=====( ̄▽ ̄*)b厲害。

有一點點小小需要注意的地方就是,數據類型要遵守NSCoding協議。只要遵守了,就可以使用這個厲害的存儲類型了。

來來來,舉幾個栗子。Dictionary、Array、Number等等都可以呀。。。

感情是個萬金油類型!!

2. 使用CoreData存儲多種數據類的通訊錄

我們在這里計劃存儲的類型有Data、Bool、String、Date、Int64。

swift,coredata,使用,coredata教程

2.1 CoreData的基本讀取操作

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

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

2.1.2 基本存儲

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

2.2 多種類型的存儲

let imgData = from.value(forKey: "avatar") as? Datalet isRelative = from.value(forKey: "isRelative") as? Boollet name = from.value(forKey: "name") as? Stringlet updateTime = from.value(forKey: "updateTime") as? Datelet viewTimes = from.value(forKey: "viewTimes") as? Int64let mobile = from.value(forKey: "mobile") as? String

來來來,就這樣輕松easy的把各種類型的都轉換好啦~ 然后就可以存入進去了吶。

3. Codable

咱們通訊錄里面通常的做法都會把一個用戶的信息全部放在一個Model里面,然后只需要把Model存儲到庫里面就好了。這個怎么做呢?

在OC時代,當需要將一個對象持久化時,需要把這個對象序列化,往常的做法是實現 NSCoding 協議。

寫過的人應該都知道實現 NSCoding 協議的代碼寫起來很痛苦,特別想哭,尤其是當屬性非常多的時候。

于是乎,Swift 4 中引入了 Codable 幫我們解決了這個問題。

struct User: Codable { var avatarImg: Data var isRelative: Bool var name: String var updateTime: Date var viewTimes: Int64 var mobile: String }

如果我們想把User 對象的實例持久化,只需要讓 User 遵守 Codable 協議即可,Language 中不用寫別的代碼。這樣就可以直接把Userencode成JSON啦。

下一篇我們就不能再用Xcode創建自帶的CoreData來搞事情了,我們要自己搞一個CoreData Stack來實現管理。

所有的源代碼都在這里:

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

總結

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


注:相關教程知識閱讀請移步到swift教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 余庆县| 布尔津县| 铜梁县| 九龙坡区| 石景山区| 永安市| 罗山县| 朝阳县| 东光县| 滦平县| 阿克苏市| 高台县| 土默特左旗| 当阳市| 东海县| 特克斯县| 梅州市| 昌吉市| 夏津县| 新晃| 开江县| 同仁县| 无锡市| 会宁县| 普安县| 新和县| 瓮安县| 墨脱县| 开鲁县| 和静县| 河南省| 沧源| 深泽县| 巫溪县| 荃湾区| 泽普县| 馆陶县| 新竹市| 梓潼县| 胶南市| 卓资县|