Swift利用CoreData如何存储多种数据类的通讯录

 更新时间:2017年12月05日 09:55:12   作者:非典型技术宅  
这篇文章主要给大家介绍了关于Swift利用CoreData如何存储多种数据类的通讯录的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧。

前言

我们在上一篇文章简单的实现了一个通讯录,说是通讯录实际上就只是一个简简单单的Name List。这次我们要往这个通讯录里面加入更多的元素,目的也是为了学习CoreData如何存储更多的数据类型。下面话不多说了,来随着小编一起看看详细的介绍吧。

完成后的效果:


1. 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。


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? Data
let isRelative = from.value(forKey: "isRelative") as? Bool
let name = from.value(forKey: "name") as? String
let updateTime = from.value(forKey: "updateTime") as? Date
let viewTimes = from.value(forKey: "viewTimes") as? Int64
let 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

源码下载:http://xiazai.jb51.net/201712/yuanma/CoreDataDemo(jb51.net).rar

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • swift如何利用系统库将汉字转换为拼音详解

    swift如何利用系统库将汉字转换为拼音详解

    将汉字转换为拼音更利于我们大家开发搜索功能,所以这篇文章主要给大家介绍了关于swift如何利用系统库将汉字转换为拼音的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-10-10
  • swift framework使用OC 代码两种方式示例

    swift framework使用OC 代码两种方式示例

    这篇文章主要为大家介绍了swift framework使用OC 代码两种方式示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Swift实现“或”操作符的3种方法示例

    Swift实现“或”操作符的3种方法示例

    这篇文章主要给大家介绍了关于Swift实现“或”操作符的3种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03
  • Swift实现快速排序算法的代码示例

    Swift实现快速排序算法的代码示例

    这篇文章主要介绍了Swift实现快速排序算法的代码示例,首先利用分治法讲解了快速排序的思路,需要的朋友可以参考下
    2016-07-07
  • Combine中错误处理和Scheduler使用详解

    Combine中错误处理和Scheduler使用详解

    这篇文章主要为大家介绍了Combine中错误处理和Scheduler使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Swift实现表格视图单元格单选(1)

    Swift实现表格视图单元格单选(1)

    这篇文章主要为大家详细介绍了Swift实现表格视图单元格单选,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • 详解swift中xcworkspace多项目管理

    详解swift中xcworkspace多项目管理

    给大家详细讲解了IOS开发中swift语言xcworkspace多项目管理的方法和介绍,一起参考一下。
    2017-11-11
  • Swift类型创建之自定义一个类型详解

    Swift类型创建之自定义一个类型详解

    这篇文章主要介绍了Swift类型创建之自定义一个类型详解,本文讲解了自定义原型、实现默认值、支持基本布尔型初始化、支持Bool类型判断、支持兼容各们各派的类型、完善OCBool的布尔基因体系等内容,需要的朋友可以参考下
    2015-05-05
  • Swift里的值类型与引用类型区别和使用

    Swift里的值类型与引用类型区别和使用

    这篇文章主要介绍了Swift里的值类型与引用类型区别和使用,本文讲解了值类型与引用类型的区别、如何选择类型、什么时候该用值类型、什么时候该用引用类型等内容,需要的朋友可以参考下
    2015-05-05
  • Swift 中如何使用 Option Pattern 改善可选项的 API 设计

    Swift 中如何使用 Option Pattern 改善可选项的 API 设计

    这篇文章主要介绍了Swift 中如何使用 Option Pattern 改善可选项的 API 设计,帮助大家更好的进行ios开发,感兴趣的朋友可以了解下
    2020-10-10

最新评论