"致命错误:在展开可选值时意外发现nil"从NSData创建UIImage时

时间:2016-02-22 11:33:34

标签: ios xcode swift2 nsdata

首先,我将图像转换为NSData,并以sqlite blob形式在fmdb(飞行数据库)的帮助下插入sqlite数据库。 然后我回溯了NSData,但在将NSData转换为UIImage时,我收到错误" fatal error: unexpectedly found nil while unwrapping an Optional value"。    here is the screenshot of the error I am facing

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


    }


    }

1 个答案:

答案 0 :(得分:1)

首先我将UImage更改为NSData 然后将NSData转换为base64EncodedString。 之后,以TEXT而不是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())")
        }


    }


    }

在检索作为String存储在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

    }