我正在使用具有 PostgreSQL 后端的 Web 服务以 JSON 返回的数据填充 UITableView
。缩略图数据在数据库中存储为 bytea
。
JSON 字段“thumbnail”(recentRiddims[indexPath.row].thumbnail
) 返回的数据类似于:\xffd8ffe000104a46494600010200000100010000ffdb0043000806060706050807070709 ...
通过其魔术字节 0xFFD8FF
可以看出它是 JPEG 图像。但是,该字符串似乎已被转义。在 PHP 中,我通常使用 pg_unescape_bytea(data)
来获取可用于在浏览器中显示图像的实际图像数据。因此,我尝试使用 PHP 中的同一组 JSON 数据,我知道该数据是有效的 JPEG 图像。
应用程序编译并启动正常,但 UITableViewCell
中的缩略图 UIImageView
显示为空(灰色框,UIImageView
的颜色)背景),而 UILabel
的文本则使用 JSON 中的数据进行更新。
我是 Swift 新手,所以我确信有一种我还不知道的简单方法可以完成此任务。
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
是一个元组数组 [(riddim: String, label: String, count: String,thumbnail: String)]
,包含已解析的 JSON 每个键的值。
我假设缩略图没有显示图像,因为数据已转义。
是否有与 PHP 的 pg_unescape_bytea()
等效的函数,或者用户应该手动取消转义? (不过我不太确定如何手动转义。)
有没有一种更简单的方法可以通过 swift 中的 JSON 数据填充 UITableView
?
该项目的部署目标设置为使用 Universal 的 iOS 8.4,并在 Yosemite 上运行最新的 XCode。
编辑:
我不再认为键“缩略图”的 JSON 数据采用转义格式,我只是查看了存储数据的数据库,例如 \377\330\377\340\000\020JFIF\000\001\002\000\000\001\000 ...
。显然,从 \oct
的转换是由 PHP webservice 完成的,但我不知道为什么缩略图数据以 \x
开头。我更希望它以 ffd8ff...
或 0xffd8ff...
开头。如果 JSON 数据包含正确转义的 bytea 数据,为什么应用程序根本不显示缩略图?
最佳答案
经过一夜好眠,消除了我的大脑停滞后,我立即以清醒的头脑查看代码,意识到了自己的错误;数据是以十六进制编码的有效图像数据,前缀为 \x
。
我所要做的就是使用 (thumbnailString as NSString).substringFromIndex(2)
从 String
对象中删除 \x
和然后NSData.fromHexString(thumbnailString)
,解码十六进制字符串并从中创建一个NSData
对象。
可以找到 NSData
的扩展
here ,感谢 Sjors Provoost。
关于json - 如何使用包含 bytea 字段(PostgreSQL)数据的 JSON 填充 UITableViewCell 中的 UIImage?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32574408/