2016-02-22 15 views
6

Öncelikle bir görüntüyü NSData içine dönüştürdüm ve sqlite veritabanına sqlite blob biçiminde fmdb (uçan et veritabanı) yardımıyla eklendim . Sonra NSData'yı geri aldım, ancak NSData'yı UIImage'a dönüştürürken "fatal error: unexpectedly found nil while unwrapping an Optional value" hatası alıyorum. here is the screenshot of the error I am facing "Önemli hata: NSData'dan UIImage oluşturulurken beklenmedik bir şekilde nil bir değer bulundu"

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

Bu i öncelikle ben sonra base64EncodedString içine NSData dönüştürmek NSData içine UImage değiştirmek Buraya bir resim

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

hayır .. correctpic NSData & değil bir resmin türüdür ... & i, daha önce –

+0

kod gibi bazı kod gönderebilir sqlite girdiğiniz tüm imageData içeriyor? kopyalama/yapıştırma işlemini kolaylaştırır. Sorun, muhtemelen 'UIImage' in 'correctPicture' ile başlatılmasının başarısız olması ve '!' Ile çarpılmasına neden olması. 'CorrectPicture' verilerinin 'UIImage' öğesine dönüştürülememesi mantıklı olabilir. – mmarkman

+0

Kodu yanıtımı gönderdim… yanıtı için thanx :) –

cevap

2

kaydetmek için kullanılan koddur. Bir görüntü Dize ardından tekrar NSData içine base64EncodedString dönüştürmek olarak sqlite veritabanı içinde depolanan dize veri almaya aldıktan iken Bundan sonra METİN şeklinde yerine damlasını

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


    } 


    } 

bir sqlite veritabanında bu dizeyi kaydedin. Bundan sonra NSData'yı görüntüye geri çevirir.

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 

    } 
İlgili konular