Ответ 1
Изображения можно хранить как NSData
. Если у вас есть URL-адрес изображения, который вы хотите сохранить локально, вот фрагмент кода, как это можно сделать.
class MyImageBlob {
var data: NSData?
}
// Working Example
let url = NSURL(string: "http://images.apple.com/v/home/cb/images/home_evergreen_hero_iphone_medium.jpg")!
if let imgData = NSData(contentsOfURL: url) {
var myblob = MyImageBlob()
myblob.data = imgData
let realm = try! Realm()
try! realm.write {
realm.add(myblob)
}
}
Может быть, это плохая идея?
Правило прост: Если изображения невелики по размеру, количество изображений невелико, и они редко меняются, вы можете хранить их в базе данных.
Если есть изображения сгустка, вам лучше записывать их непосредственно в файловую систему и просто сохранять путь к изображению в базе данных.
Вот как это можно сделать:
class MyImageStorage{
var imagePath: NSString?
}
let url = NSURL(string: "http://images.apple.com/v/home/cb/images/home_evergreen_hero_iphone_medium.jpg")!
if let imgData = NSData(contentsOfURL: url) {
// Storing image in documents folder (Swift 2.0+)
let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0]
let writePath = documentsPath?.stringByAppendingPathComponent("myimage.jpg")
imgData.writeToFile(writePath, atomically: true)
var mystorage = MyImageStorage()
mystorage.imagePath = writePath
let realm = try! Realm()
try! realm.write {
realm.add(mystorage)
}
}
Обратите внимание: Оба образца кода не являются надежными методами для загрузки изображений, так как есть много ошибок. В реальных приложениях/в производстве я бы предложил использовать библиотеку, предназначенную для этой цели, например AFNetworking или AlamofireImage.