2015-01-09 21 views
0

我試圖挽救Parse.com檢索這樣的圖像檢索圖片:斯威夫特 - 節能和userDefaults

    let userImageFile = object["Image"] as PFFile 
        userImageFile.getDataInBackgroundWithBlock { 
         (imageData: NSData!, error: NSError!) -> Void in 
         if error == nil { 
          image = UIImage(data:imageData) 
          let imageToSave:NSData = UIImagePNGRepresentation(image) 
          self.saveImage(intRandomNumb, retImage: imageToSave) 
         } 
        } 

其中saveImage功能如下:

func saveImage(imagepath:Int, retImage:NSData){ 

    println("image is being saved") 

    let defaults = NSUserDefaults.standardUserDefaults() 
    let imagePathName = "\(imagepath)" 

    defaults.setObject(retImage, forKey: imagePathName) 

} 

和後來,我試圖顯示這樣的圖像,像這樣:

 var point = gestureRecognizer.locationInView(self.tv) 
     if let indexPath = self.tv.indexPathForRowAtPoint(point) 
     { 
      let data = mainList[indexPath.row] as SecondModel 
      let fileRef = data.fileReference 
      let intFileRef = Int(fileRef) 
      println(intFileRef) 

      let defaults = NSUserDefaults.standardUserDefaults() 
      let usedKeyName = "\(intFileRef)" 

      if let photo = defaults.objectForKey(usedKeyName) as? UIImage { 
       println("Image created") 
       let photo = defaults.objectForKey(usedKeyName) as UIImage 

       var imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height)) 
       imageView.image = photo 
       self.view.addSubview(imageView) 
      } 

和「圖像創建」永遠不會被打印哪意味着檢索不知何故不起作用。 我不太確定你是否能夠象我在這裏所做的那樣將圖像保存到userdefaults,但這是我能想到的最好的,並且我找不到像Swift這樣的任何以前的問題。

關於如何進行的任何建議,將不勝感激。

解決方案:問題是我試圖直接加載圖像作爲UIImage。我還必須將NSData轉換爲UIImage,這一切都發生在上面顯示的代碼的最後一部分。最後我的代碼看起來像這樣:

 if let photo = defaults.objectForKey("\(intFileRef)") as? NSData { 
      println("Image created") 
      let photo = defaults.objectForKey("\(intFileRef)") as NSData 
      let imageToView:UIImage = UIImage(data: photo) 

      var imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height)) 
      imageView.image = imageToView 
      self.view.addSubview(imageView) 
     } 

我希望這可以幫助別人掙扎與類似的東西。

+1

圖像以用戶默認值存儲爲NSData,並嘗試直接實例化UIImage ...也許這就是問題 – Volker

+0

確實,這解決了問題,並且「圖像創建」被打印出來。但是,我如何將NSData轉換爲UIImage呢? @Volker – martin

+1

http://stackoverflow.com/questions/257400/nsdata-and-uiimage應該涵蓋那 – Volker

回答

0

看起來好像你不打電話defaults.synchronize()所以它沒有寫入默認文件。

+0

在saveImage函數中,你的意思是? – martin

+3

有沒有必要調用同步,看到這個答案:http://stackoverflow.com/a/9647965/267892 – Emil

+0

好的。我錯過了。另外,我不是那麼關注iOS。在OSX中,使用同步已經成爲習慣。儘管我會檢查文件的更新。感謝指針。 - P.S.也適用於OS X –

0

斯威夫特3

嘿嘿,試試這個漂亮的代碼在這裏:

  • 轉換您的UIImage到Data

    PNG:

yourDataImagePNG = UIImagePNGRepresentation(yourUIImageHere) 

JPEG:

yourDataImageJPG = UIImage(data: yourUIImageHere,scale:1.0) 
  • 保存在UserDefaults。
UserDefaults().set(yourDataImagePNG, forKey: "image") 
  • 恢復從:
UserDefaults.standard.object(forKey: "image") as! Data 

我希望能幫助!