我正在使用Swift 2.2编写iOS应用程序,我想在Realm数据库中本地保存帐户的个人资料图片。
我试过here,最后我有一个imageView,两个按钮。一个按钮用于保存图像,另一个按钮用于显示。在我的imageView中,我从图库中选择了图像并拍摄了NSData,并尝试将其存储在数据库中,但我无法检索它。请建议任何程序,以便我能够存储图像并显示它。
我的模特是
class ImageModel:Object{
var photoData: NSData? = nil
}
在我的Image课程中我做了
var imgData = NSData()
我的图片选择器控制器如下所示
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
imageView.contentMode = .ScaleAspectFit
imageView.image = pickedImage
let imageData = UIImagePNGRepresentation(pickedImage)!
self.imgData = imageData
//print(imgData,"\n")
}
在我的保存按钮中
let imgModel = ImageModel()
@IBAction func SaveImageToDB(sender: AnyObject) {
imgModel.photoData = self.imgData
print(imgModel.photoData)
try! moreUses.sharedInstance().realm.write{
try! moreUses.sharedInstance().realm.add(imgModel)
}
}
@IBAction func ShowImageFromDB(sender: AnyObject) {
let lists = moreUses.sharedInstance().realm.objects(ImageModel)
print(lists)
//let image : UIImage = UIImage(data: lists[0].photoData!)!
//print(image)
}
我的realm对象的单例类是
class moreUses{
var realm = try! Realm()
static var mrUser: moreUses!
class func sharedInstance() -> moreUses {
if mrUser != nil {
return self.mrUser
}
return moreUses();
}
init() {
}
}
答案 0 :(得分:1)
在回答之前,让我先说一下避免在Realm中保存像图像这样的大型数据对象的最佳做法。由于这些类型的数据已经可以很容易地保存为普通文件,因此将它们存储在Realm中并没有什么好处。只需要一个代表图像的领域.exe
就好了,但你只需在磁盘上访问它。
如果您绝对必须将图像保存到Realm,那么您已经走在正确的轨道上了:
Object
要进一步检查您的代码:
let image = UIImage()
let imageData = UIImagePNGRepresentation(image)
let realm = try! Realm()
let imageObject = ImageObject()
imageObject.data = imageData
try! realm.write {
try! realm.add(imageObject)
}
let queriedImageObject = realm.objects(ImageObject.self).first
let retrievedImage = UIImage(data: queriedImageObject.data)
个实例。每次调用Realm
时,它都会在该线程上重复使用相同的副本,因此没有性能命中。Realm()
的单个常量对象。如果您每次都要创建新副本,则每次都应创建ImageModel()
的新实例,如果要保留,则应ImageModel()
更新原始对象,具体取决于您的使用情况。只有一个(而不是每次都调用try! realm.write { }
。)