Swift - Realm数据库中图片的插入、读取(Data类型数据的存储)
作者:hangge | 2017-04-12 08:10
(本文代码已升级至Swift4)
我原来写一过一篇文章介绍如何使用 Realm 数据库(点击查看)。当时存取的都是一些数字、字符串这样的基本数据类型,有网友问如果想存个图片(Image)进去应该怎么做。本文演示如何实现 Data 类型的数据存取。
1,实现原理
(1)Realm 支持 Data 类型的属性,我们要做的就是将图片转换为 Data 类型,再进行存储即可。
(2)Data 类型的属性读取操作同其他数据类型的读取没什么差别。只要注意不要超过 16MB 即可。
2,效果图
(1)点击“保存”按钮,将项目中的 0.png 这张图片存储到 Realm 数据库中。
(2)点击“读取”按钮,从库中取出最新保存的那张图片,并显示在 imageview 中。

3,样例代码
import UIKit
import RealmSwift
class ViewController: UIViewController {
//用于显示图片
@IBOutlet weak var imageView: UIImageView!
//使用默认的数据库
let realm = try! Realm()
override func viewDidLoad() {
super.viewDidLoad()
}
//点击保存
@IBAction func saveData(_ sender: Any) {
//获取图片并转换为Data
let imageURL = Bundle.main.url(forResource: "0", withExtension: "png")!
let imageData = try! Data(contentsOf: imageURL)
//将Data数据放到实体对象中
let portrait = HeadPortrait()
portrait.data = imageData
//数据持久化操作(类型记录也会自动添加的)
try! realm.write {
realm.add(portrait)
}
print("数据保存完毕!")
}
//点击加载
@IBAction func loadData(_ sender: Any) {
//获取所有头像图片(根据插入时间倒序排列)
let portraits = realm.objects(HeadPortrait.self).sorted(byKeyPath: "date", ascending: false)
//将最新一张图片显示出来
if portraits.count > 0 {
if let imgData = portraits[0].data {
self.imageView.image = UIImage(data: imgData)
}
}
print("数据读取完毕!")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
//用户头像
class HeadPortrait:Object {
//图片数据
@objc dynamic var data:Data?
//创建时间
@objc dynamic var date = Date()
}
全部评论(0)