gpt4 book ai didi

ios - 从 NSData 创建 UIImage 时出现 "fatal error: unexpectedly found nil while unwrapping an Optional value"

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:12:43 26 4
gpt4 key购买 nike

首先,我将一张图片转换为NSData,并借助fmdb(飞肉数据库)以sqlite blob的形式插入到sqlite数据库中。然后我取回 NSData,但是在将 NSData 转换为 UIImage 时出现错误“ fatal error :在展开可选值时意外发现 nil”。 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())")
}


}


}

最佳答案

这里首先我把 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

}

关于ios - 从 NSData 创建 UIImage 时出现 "fatal error: unexpectedly found nil while unwrapping an Optional value",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35552537/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com