- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章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已经保存数据的五个步骤 。
2.1.2 基本存储 。
2.2 多种类型的存储 。
1
2
3
4
5
6
|
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 帮我们解决了这个问题.
1
2
3
4
5
6
7
8
|
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://www.jianshu.com/p/a87d29610629 。
最后此篇关于Swift利用CoreData如何存储多种数据类的通讯录的文章就讲到这里了,如果你想了解更多关于Swift利用CoreData如何存储多种数据类的通讯录的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
您好,我是个菜鸟,如果您对此有任何帮助,我将不胜感激。我正在尝试使用用户保存在他们地址簿中的数据,之后我想让他们选择使用该地址进行递送。 这是我的地址 Controller class Address
我目前正在为我的公司开发一个网络应用程序。在此应用程序中,有一个表单,其中的输入字段包含有关联系人的信息。我想创建一个按钮,单击即可在地址簿中创建联系人。 是否可以使用 JavaScript 或其他网
在隐藏通讯录界面之前,是否可以一次选择多个联系人?还是每次地址簿界面出现时实际上只需要选择一个联系人? 最佳答案 是的,Whatsapp做到了。 如果您需要一个示例,请参见以下示例: MultiCon
我正在尝试获取 Android 中联系人的所有电话号码。我的代码如下所示: ContentResolver cr = context.getContentResolver(); String[] pr
我正在为域中的所有用户构建一个表。我让表格正常工作,并在其中为我的分页添加了一些代码,但现在我不断收到错误... //connection $conn = new mysqli($servername
我正在开发一个可以访问 iPhone 通讯录的应用程序。模拟器仅包含几个示例条目。我想找到一个包含数千个条目的示例地址簿字符集(英语、中文、阿拉伯语等)来全面测试我的应用程序。自己填写地址簿将花费永远
是否有任何 android API 可以提取 vcard 3.0 格式的联系人?我遇到了一个开源 vcard 项目 android-vcard 但在用法示例中提到了以下注释。 重要提示:如果您正在为
我的应用程序能够在应用程序的不同实例之间共享其内容,即有一个按钮可以让我将文档附加到电子邮件并将其发送给应用程序的另一个用户。当他们收到此文件时,它会在他们的应用程序实例中打开。这一切正常。 但是,在
我正在开发 iPhone 联系人管理应用程序。一位用户报告说他的所有联系人都是重复的。当他选择特定来源时,联系人不会重复。显然,这是因为他的地址簿同步了两次:一次是与他 PC 上的 iTunes 同步
我有两个继承自 UIViewController 的 Objective-C 类,我正在尝试一种不同的方法来学习如何与 iPhone 的地址簿进行交互。 example Apple 假设一切都在一个类
我想添加在 iOS 通讯录中保存联系人(电话号码、姓名、地址和电子邮件)的功能,方法是单击我的应用程序中的一个按钮!我该怎么做? 最佳答案 非常简单,只需按照以下步骤操作, 首先,您需要导入以下框架,
我正在使用新的 API 在我的手机上插入/更新联系人,我正在使用这种方法来更新它们.. String selectArgs1 = Data.CONTACT_ID + "=? AND " + Data.
我目前正在开发 Contact Importer 网络应用程序(使用 PHP),这样我就可以从 Gmail、Yahoo 等网站的用户帐户中获取电子邮件地址,并将它们用于我自己的邪恶目的。开个玩笑,我的
我与 Google 通讯录合作,一切顺利。但一个小时后,我需要手动刷新授予的访问权限。据此SO question我应该能够通过这个调用更新我的 refresh_token : refresh_toke
我正在使用以下代码获取 google 联系人姓名和电话号码。授权页面本身没有正常显示错误,如“您请求的页面无效”。 :( 请帮我解决这个问题... ` google.load("gdata",
正在尝试使用 google contacts api,如果我使用的话 https://www.google.com/m8/feeds/contacts/default/full 我有 25 个联系人,
由于 Google 停止了对旧版 Auth 的支持,现在我们必须使用 oAuth 2,我们简单的桌面应用程序无法再从我的 Google 帐户读取联系人。 很好 - 我明白这一点,但是这个新的 oAut
我想以编程方式将联系人直接保存到 iOS 设备的地址簿。 我该怎么做? 最佳答案 这是一个小例子: CFErrorRef error = NULL; NSLog(@"%@", [self descri
我正在尝试使用 Javascript 提取我在 Google 通讯录 ( https://contacts.google.com ) 上的联系人。为此,我需要将联系人面板滚动到底部,以便获取所有页面源
我目前正在开发一个 VoIP 应用程序,但我真的很受地址簿困扰。 由于自定义设计, native 地址簿不适合我的应用程序。此外,我想添加一些 native 地址簿中不存在的额外数据。但这会导致一些问
我是一名优秀的程序员,十分优秀!