"fatal error: unexpectedly found nil while unwrapping an Optional value" while creating UIImage from NSData

"fatal error: unexpectedly found nil while unwrapping an Optional value" while creating UIImage from NSData

首先我将一张图片转换成NSData并借助fmdb(飞肉数据库)以sqlite blob的形式插入到sqlite数据库中。 然后我取回了 NSData,但是在将 NSData 转换为 UIImage 时出现错误“fatal error: unexpectedly found nil while unwrapping an Optional value”。

 var imageData = String()
        let countryDB = FMDatabase(path: databasePath as String )
        if countryDB.open() {
            let querySQL = "SELECT   USERIMAGE FROM USERINFO WHERE ID = \((1))"







            let results:FMResultSet? = countryDB.executeQuery(querySQL,
                withArgumentsInArray: nil)

            if results?.next() == true
            {


                let correctPicture = (results?.dataForColumn("USERIMAGE"))!

                print(correctPicture)

                let memberPiC : UIImage = UIImage(data: correctPicture)!
                print(memberPiC)
             } else {
                print("record not found")
            }
            countryDB.close()
        }   else {
            print("Error: \(countryDB.lastErrorMessage())")
        }

这是我用来保存图片的代码

func saveData()
    {

         var data = NSData()
        let contactDB = FMDatabase(path : databasePath as String)

        let image = UIImage(named: "back.png")
                print(image)
                if let unwrappedImage = image {
                    data = UIImageJPEGRepresentation(unwrappedImage, 1.0)!
                    print("data" , data)



        if contactDB.open()
        {


            let insertQuery = "INSERT INTO USERINFO( userimage) VALUES('\((data))')"

            let result = contactDB.executeUpdate(insertQuery, withArgumentsInArray: nil)
            if !result {

                print("Error: \(contactDB.lastErrorMessage())")
            } else {
                            }
        }
        else {
            print("Error: \(contactDB.lastErrorMessage())")
        }


    }


    }

这里我先把UImage改成了NSData 然后将 NSData 转换为 base64EncodedString。 之后将此字符串以文本形式而不是 blob

的形式保存在 sqlite 数据库中
 func saveData()
    {

         var data = NSData()
        let contactDB = FMDatabase(path : databasePath as String)

        //insert an image
        let image = UIImage(named: "back.png")
        print(image)

        //convert an image into database NSdata()
        if let unwrappedImage = image
        {
            data = UIImagePNGRepresentation (unwrappedImage)!
            print("data" , data)


            // convert NSdata to baseEncodeng64

            let dataStr = data.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength)
            print("converted string" ,dataStr)

            // save into databse
            if contactDB.open()
            {


                //insert a query
                let insertQuery = "INSERT INTO USERINFO( USERIMAGE) VALUES('\((dataStr))')"

                let result = contactDB.executeUpdate(insertQuery, withArgumentsInArray: nil)
                if !result {

                print("Error: \(contactDB.lastErrorMessage())")
            } else {
                            }
        }
        else {
            print("Error: \(contactDB.lastErrorMessage())")
        }


    }


    }

在检索图像时,获取存储在 sqlite 数据库中的字符串数据作为字符串,然后将 base64EncodedString 转换回 NSdata。之后将 NSData 转换回图像。

func fetchData() -> UIImage
    {
        var decodedimage = UIImage()
        var imageDataString = String()
        let countryDB = FMDatabase(path: databasePath as String )
        if countryDB.open() {

            //insert a query to fetch imageStringData
            let querySQL = "SELECT   USERIMAGE FROM USERINFO WHERE ID = \((1))"

            let results:FMResultSet? = countryDB.executeQuery(querySQL,
                withArgumentsInArray: nil)

            if results?.next() == true
            {



                imageDataString = (results?.stringForColumn("USERIMAGE"))!

                //convert NSString back to NSdata
                let decodedData = NSData(base64EncodedString: imageDataString, options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters)

                //convert NSdata back to the image
                decodedimage = UIImage(data: decodedData!)!
                print("retrieve image" , decodedimage)

            } else {
                print("record not found")
            }
            countryDB.close()
        }   else {
            print("Error: \(countryDB.lastErrorMessage())")
        }



        return decodedimage

    }