2016-02-22 9 views
6

Zuerst habe ich ein Bild in NSData konvertiert und in die SQLite-Datenbank mit Hilfe von fmdb (fliegende Fleisch-Datenbank) in Form von SQLite-Blob eingefügt . Dann habe ich NSData zurückgeholt, aber beim Konvertieren von NSData in UIImage bekomme ich einen Fehler "fatal error: unexpectedly found nil while unwrapping an Optional value". here is the screenshot of the error I am facing "fataler Fehler: unerwartet gefunden Null beim Entpacken eines optionalen Wertes" beim Erstellen von UIImage von NSData

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

Dies ist der Code, den ich für das Speichern eines Bildes

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

nee .. correctpic ist Art von NSData & nicht ein Bild ... & es enthält alle imagedata, die ich zuvor in SQLite eingegeben haben –

+0

können Sie einen Code als Code posten? macht das Kopieren/Einfügen einfacher. Das Problem ist wahrscheinlich, dass 'UIImage' nicht mit' correctPicture' init initialisiert und durch das '!' Zum Absturz gebracht wird. Es kann davon ausgegangen werden, dass die Daten von 'correctPicture' nicht in 'UIImage' konvertiert werden können. – mmarkman

+0

Ich postete meinen Teil des Codes ... danke für Ihre Antwort :) –

Antwort

2

hier zunächst verwendet i uImage in NSData dann konvertieren NSData in base64EncodedString ändern. Danach speichern die Saite in einer SQLite Datenbank in Form von Text anstelle von BLOB

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


    } 


    } 

Während Kettendaten ein Bildabruf Abrufen der innerhalb sqlite Datenbank gespeichert ist, als String dann base64EncodedString in NSData zurück umwandeln. Danach konvertieren NSData zurück zum Bild.

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 

    }