我正在使用带有PostgreSQL后端的Web服务使用 JSON 中返回的数据填充UITableView
。缩略图图像数据作为bytea
存储在数据库中。
JSON字段'thumbnail'(recentRiddims[indexPath.row].thumbnail
)返回的数据类似于:\xffd8ffe000104a46494600010200000100010000ffdb0043000806060706050807070709 ...
可以通过其魔术字节0xFFD8FF
来判断它是 JPEG 图像。但是,该字符串似乎是转义的。在 PHP 中,我通常使用pg_unescape_bytea(data)
来获取可用于在浏览器中显示图像的实际图像数据。因此,我在 PHP 中使用相同的 JSON 数据进行了尝试,我知道数据是有效的 JPEG 图像。
该应用程序编译并启动正常,但UIImageView
中的缩略图UITableViewCell
显示为空(灰色框,UIImageView
背景的颜色),而{{1} } s'文本使用来自 JSON 的数据进行更新。
我是 Swift 的新手,所以我确信有一种简单的方法可以完成这项工作,我还不知道。
UILabel
函数如下所示:
cellForRowAtIndexPath
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let recentRiddimsCell = tableView.dequeueReusableCellWithIdentifier("recentRiddimsCell", forIndexPath: indexPath) as! RecentRiddimsCell
// Configure the cell...
recentRiddimsCell.riddimLabel.text = recentRiddims[indexPath.row].riddim
recentRiddimsCell.labelLabel.text = recentRiddims[indexPath.row].label
//image test
var thumbnailString: String! = recentRiddims[indexPath.row].thumbnail
let imageData = NSData(data: thumbnailString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!)
let image = UIImage(data: imageData)
recentRiddimsCell.imageThumbnail.image = image
return recentRiddimsCell
}
是一个元组recentRiddims
数组,包含每个键的解析后的 JSON 值。
我认为缩略图不显示图像,因为数据已转义。
是否有相当于 PHP 的[(riddim: String, label: String, count: String, thumbnail: String)]
或用户是否应该手动转换? (我不确定如何手动浏览。)
是否有更简单的方法通过swift中的JSON数据填充pg_unescape_bytea()
?
项目的部署目标使用 Universal 设置为 iOS 8.4 ,在Yosemite上运行最新的XCode。
修改
我不再认为关键“缩略图”的 JSON 数据是转义格式的,我只是查看数据存储的数据库,如UITableView
。显然,\377\330\377\340\000\020JFIF\000\001\002\000\000\001\000 ...
的转换是由 PHP 网络服务完成的,但我不知道为什么缩略图数据以\oct
开头。我更希望它以\x
或ffd8ff...
开头。如果 JSON 数据保存了正确转义的bytea数据,为什么应用程序根本不显示缩略图?
答案 0 :(得分:0)
经过一夜的睡眠,消除了我的大脑失速后,我立刻意识到自己的错误。数据是以十六进制编码的有效图像数据,前缀为\x
。
我所要做的就是从\x
对象中移除String
,使用(thumbnailString as NSString).substringFromIndex(2)
然后NSData.fromHexString(thumbnailString)
来解码十六进制字符串并创建NSData
来自它的对象。
可以找到extension
的{{1}} here,将信用转到 Sjors Provoost 。