"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
}
首先我将一张图片转换成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
}