如何使用包含bytea字段(PostgreSQL)数据的JSON在UITableViewCell中填充UIImage?

如何使用包含bytea字段(PostgreSQL)数据的JSON在UITableViewCell中填充UIImage?,json,swift,uitableview,Json,Swift,Uitableview,我正在使用带有PostgreSQL后端的Web服务在JSON中返回的数据填充UITableView。缩略图像数据以bytea的形式存储在数据库中 JSON字段“缩略图”(recentRiddims[indexath.row].thumbnail)返回的数据类似于:\xffd8ffe000104a46494600010200000100010000ffdb004300080606070508070707070707070709… 通过它的神奇字节0xFFD8FF,可以看出它是JPEG图像。但是,字

我正在使用带有PostgreSQL后端的Web服务在JSON中返回的数据填充
UITableView
。缩略图像数据以
bytea
的形式存储在数据库中

JSON字段“缩略图”(recentRiddims[indexath.row].thumbnail)返回的数据类似于:
\xffd8ffe000104a46494600010200000100010000ffdb004300080606070508070707070707070709…

通过它的神奇字节
0xFFD8FF
,可以看出它是JPEG图像。但是,字符串似乎已转义。在PHP中,我通常使用
pg_unescape_bytea(data)
来获取可用于在浏览器中显示图像的实际图像数据。因此,我在PHP中尝试使用相同的JSON数据集,我知道数据是有效的JPEG图像

该应用程序编译和启动良好,但
UITableViewCell
中的缩略图
UIImageView
显示为空(灰色框,为
UIImageView
背景的颜色),而
UILabel
s'文本则使用JSON中的数据进行更新

我是Swift新手,因此我确信有一种简单的方法可以完成这项工作,但我还不知道

cellforrowatinexpath
函数如下所示:

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
是一个元组数组
[(ridim:String,label:String,count:String,thumbnail:String)]
,包含每个键解析的JSON

我假设缩略图不显示图像,因为数据已转义

是否存在与PHP的
pg_unescape_bytea()等价的PHP
或者用户应该手动unescape?(但我不确定如何手动取消景观。)

是否有更简单的方法通过swift中的JSON数据填充
UITableView

该项目的部署目标设置为iOS 8.4,使用在约塞米蒂运行最新XCode的Universal

编辑:
我不再认为键“缩略图”的JSON数据是转义格式,我只是查看了存储数据的数据库,如
\377\330\377\340\000\020JFIF\000\001\002\000\000\001\000…
。显然,从
\oct
的转换是由PHPWeb服务完成的,但是,我不知道为什么缩略图数据以
\x
开头。我希望它从
ffd8ff…
0xffd8ff…
开始。如果JSON数据正确地保存了转义bytea数据,为什么应用程序根本不显示缩略图?

经过一夜的良好睡眠,消除了我的大脑停滞,我立即意识到了我的错误,用一种新的思维看代码;数据是以十六进制编码的有效图像数据,前面有
\x

我所要做的就是从
\x
对象中删除
\x
,使用
(thumbnailString作为NSString)。substringFromIndex(2)
,然后使用
NSData.fromHexString(thumbnailString)
,对十六进制字符串进行解码并从中创建一个
NSData
对象

可以找到
NSData
扩展名
,积分归Sjors Provoost