Swift2从Firebase中检索图片 [英] Swift2 retrieving images from Firebase

查看:175
本文介绍了Swift2从Firebase中检索图片的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图从Firebase读取/显示图片。我首先编码图像,然后将这个编码的字符串发布到Firebase。这运行良好。当我尝试解码来自Firebase的编码字符串并将其转换为图像时,我得到一个零值异常。



这就是我将图像保存到Firebase

  var base64String:NSString! 
func imagePickerController(picker:UIImagePickerController,didFinishPickingImage image:UIImage,editingInfo:[String:AnyObject]?){

self.dismissViewControllerAnimated(true,completion:nil)

imageToPost.image = image

var uploadImage = image as! UIImage
var imageData = UIImagePNGRepresentation(uploadImage)!
self.base64String = imageData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength)
let ref = Firebase(url:https://XXX.firebaseio.com)

var quoteString = [string:self.base64String]
var usersRef = ref.childByAppendingPath(goalImages)
var users = [image:quoteString]
usersRef.setValue(users)

displayAlert(Image Posted,信息:Your image has been posted posted!)
}

这就是我想要从Firebase读取图片的方式

  // ViewController.swift 

导入UIKit
导入Firebase

类ViewController:UIViewController {
@IBOutlet弱var image:UIImageView!
var base64String:NSString!

@IBAction func buttonClicked(sender:AnyObject){

sender.setTitle(\(sender.tag),forState:UIControlState.Normal)


$ b重写func viewDidLoad(){
super.viewDidLoad()
//在加载视图之后,通常从一个笔尖执行任何额外的设置。

let ref = Firebase(url:https://XXX.firebaseio.com/goalImages/image/string)

ref.observeEventType(.Value,withBlock: {snapshot in

self.base64String = snapshot.value as!NSString
let decodedData = NSData(base64EncodedString:self.base64String as String,options:NSDataBase64DecodingOptions())
//下一行是错误
var decodeImage = UIImage(data:decodedData!)

self.image.image = decodedImage
},withCancelBlock:{error in
print(error.description)
})

}

覆盖func didReceiveMemoryWarning(){
super.didReceiveMemoryWarning()
//处置任何可以重新创建的资源。






错误提示:致命错误:意外发现无同时展开一个可选值; decodeData是零。有人可以解释什么是错的。

解决方案

  let decodedData = NSData(base64EncodedString:self.base64String as String,
options:NSDataBase64DecodingOptions())



尝试添加IgnoreUnknownCharacters

  NSDataBase64DecodingOptions.IgnoreUnknownCharacters 

使用示例:编码一个jpg,存储并从firebase读取

编码并编写我们最喜欢的星舰



$ p $ 如果let image = NSImage(named:Enterprise.jpeg){
let imageData = image.TIFFRepresentation
let base64String = imageData!.base64EncodedStringWithOptions(.Encoding64CharacterLineLength)
let imageRef = myRootRef.childByAppendingPath(image_path)
imageRef.setValue(base64String)

读取和解码

  imageRef.observeEventType(.V alue,withBlock:{快照

让base64EncodedString = snapshot.value
让imageData = NSData(base64EncodedString:base64EncodedString as!字符串,
选项:NSDataBase64DecodingOptions.IgnoreUnknownCharacters)
让decodeImage = NSImage(data:imageData!)
self.myImageView.image = decodedImage

},withCancelBlock:{错误
print(error.description)
})


I am trying to read/display an image from Firebase. I am first encoding the image and then posting this encoded String to Firebase. This runs fine. When I try and decode the encoded string from Firebase and convert it to an image, I am getting a nil value exception.

This is how I am saving the image to Firebase

var base64String: NSString!
func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) {

    self.dismissViewControllerAnimated(true, completion: nil)

    imageToPost.image = image

    var uploadImage = image as! UIImage
    var imageData = UIImagePNGRepresentation(uploadImage)!
    self.base64String = imageData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength)
    let ref = Firebase(url: "https://XXX.firebaseio.com")

    var quoteString = ["string": self.base64String]
    var usersRef = ref.childByAppendingPath("goalImages")
    var users = ["image": quoteString]
    usersRef.setValue(users)

    displayAlert("Image Posted", message: "Your image has been successfully posted!")
}

This is how I am trying to read the image from Firebase

//  ViewController.swift

import UIKit
import Firebase

class ViewController: UIViewController {
@IBOutlet weak var image: UIImageView!
var base64String: NSString!

@IBAction func buttonClicked(sender: AnyObject) {

    sender.setTitle("\(sender.tag)", forState: UIControlState.Normal)

}

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    let ref = Firebase(url: "https://XXX.firebaseio.com/goalImages/image/string")

    ref.observeEventType(.Value, withBlock: { snapshot in

        self.base64String = snapshot.value as! NSString
        let decodedData = NSData(base64EncodedString: self.base64String as String, options: NSDataBase64DecodingOptions())
        //Next line is giving the error
        var decodedImage = UIImage(data: decodedData!)

        self.image.image = decodedImage
        }, withCancelBlock: { error in
            print(error.description)
        })

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
}

The error says: "fatal error: unexpectedly found nil while unwrapping an Optional value"; decodedData is nil. Could someone explain what is going wrong.

解决方案

Instead of

let decodedData = NSData(base64EncodedString: self.base64String as String, 
                                     options: NSDataBase64DecodingOptions())

try adding IgnoreUnknownCharacters

NSDataBase64DecodingOptions.IgnoreUnknownCharacters

Use Example: Encode a jpg, store and read from firebase

encode and write our favorite star ship

    if let image = NSImage(named:"Enterprise.jpeg") {
    let imageData = image.TIFFRepresentation
    let base64String = imageData!.base64EncodedStringWithOptions(.Encoding64CharacterLineLength)
    let imageRef = myRootRef.childByAppendingPath("image_path")
    imageRef.setValue(base64String)

read and decode

       imageRef.observeEventType(.Value, withBlock: { snapshot in

            let base64EncodedString = snapshot.value
            let imageData = NSData(base64EncodedString: base64EncodedString as! String, 
                           options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters)
            let decodedImage = NSImage(data:imageData!)
            self.myImageView.image = decodedImage

            }, withCancelBlock: { error in
                print(error.description)
        })

这篇关于Swift2从Firebase中检索图片的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆