2016-10-05 1 views
0

私はSwift 2.2を使用してiOSアプリケーションを作成しています。アカウントのプロフィール画像をRealmデータベースにローカルに保存したいと思います。IOSアプリケーションまたはSwift 2.2でRealmデータベースからイメージを復元する方法は?

私はhereからやってみました。最後はimageViewという2つのボタンがあります。 1つのボタンは画像を保存するためのものであり、もう1つはshow.Inの画像用です。ギャラリーから画像を選択して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) 


} 

とレルムオブジェクトのための私のシングルトンクラスが答える前に

class moreUses{ 

    var realm = try! Realm() 

    static var mrUser: moreUses! 

    class func sharedInstance() -> moreUses { 
     if mrUser != nil { 
      return self.mrUser 
     } 
     return moreUses(); 
    } 

    init() { 
    } 
} 

答えて

1

で、私はちょうどそれがレルム内の画像のような大規模なデータ・オブジェクトを保存しないようにする最善の方法だとしましょう。これらのタイプのデータは通常のファイルとして簡単に保存できるため、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()に電話をかけるたびに、そのスレッドで同じコピーが再利用されるため、そこにはパフォーマンスヒットはありません。
  • イメージをデータベースに追加するときは、常に1つの定数オブジェクトImageModel()を参照しています。ユースケースに応じて、毎回新しいコピーを作成する場合は毎回ImageModel()の新しいインスタンスを作成するか、1つしか保持しない場合は元のオブジェクトを更新する場合はtry! realm.write { }を作成するか(毎回realm.add()を呼び出すのではなく) 。
+0

私は2つのボタンfunction.oneを保存し、もう1つを復元することを確認してください。すべてが1つの関数で行い、ImageObject()を使用しました。どのように私はfuncから復元することができますShowImageFromDB() – KhanShaheb

+0

http://paste.ubuntu.com/23283413/ – KhanShaheb

+0

このコードをご覧ください。私はあなたのコードを実行しようとしたときに無しと表示します – KhanShaheb

関連する問題