微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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",message: "Your image has been successfully posted!")
}

这就是我尝试从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.
}
}

错误说:“致命错误:在展开Optional值时意外发现nil”; decodingData是零.有人可以解释出了什么问题.

解决方法

代替

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

尝试添加IgnoreUnkNownCharacters

NSDataBase64DecodingOptions.IgnoreUnkNownCharacters

使用示例:编码jpg,存储和读取firebase

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

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)

读取和解码

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)
        })

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐