2016-02-22 10 views
6

最初に画像を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 NSDataからUIImageを作成している間に "致命的なエラー:予期せず見つからないオプション値をアンラップしています"

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

これは私が最初に私は、base64EncodedStringにNSDataの変換NSDataの にUImageを変更ここで画像

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


    } 


    } 
+0

いや... correctpicはNSDataの&いない画像の種類がある...&それは私が以前 –

+0

はあなたがコードとしていくつかのコードを投稿することができますsqliteの中に入力したすべての画像データが含まれていますか?コピー/貼り付けが簡単になります。問題はおそらく 'UIImage'が' correctPicture'でinitに失敗し、クラッシュを引き起こす '!'によって強制されていることでしょう。 'correctPicture'のデータが' UIImage'に変換できないと推論することができます。 – mmarkman

+0

私はコードの一部を投稿しました.URLレスポンスのために、ありがとうございました:) –

答えて

2

を保存するために使用されるコードです。画像列を戻したNSDataにbase64EncodedString変換として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())") 
     } 


    } 


    } 

のTEXTの形でのSQLiteデータベースにこの文字列を保存します。その後、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 

    } 
関連する問題