从文档目录中的本地图像发出设置 UIImageView
Issue setting UIImageView from local image in documents directory
我正在尝试将使用 Alamofire 下载的图像加载到文档目录中。我将文件名存储在 Realm 数据库中。一旦到了显示图像的时间,我就获取文档目录的路径并附加文件名。不过,此路径似乎不适用于构建 UIImage。
if let name = playlist.RLMsongs[indexPath.row].name, let imageURL = playlist.RLMsongs[indexPath.row].album?.image?.getImageURL(.SmallImage), let fileName = playlist.RLMsongs[indexPath.row].album?.image?.smallLocalFileName {
cell.songName.text = name
let range = imageURL.rangeOfString("http")
if let theRange = range where theRange.startIndex == imageURL.startIndex { // imageURL starts with "http" (remote url)
cell.albumImage.sd_setImageWithURL(NSURL(string: imageURL), placeholderImage: UIColor.imageFromColor(UIColor.grayColor())) {
_ in
cell.albumImage.fadeIn(completion: nil)
}
} else {
cell.albumImage.image = UIImage(named: fileName) // images still do not load
// tried this first -> cell.albumImage.sd_setImageWithURL(NSURL(fileURLWithPath: imageURL), placeholderImage: UIColor.imageFromColor(UIColor.grayColor()))
}
}
这是构建路径的位(上面的 imageURL):
let documentsDir = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0]
let path = documentsDir.URLByAppendingPathComponent(localFile).path
return path
根据 TiM 的建议,我在断点处检查了 imageURL 的值,它看起来很好:
imageURL: "/Users/danielnall/Library/Developer/CoreSimulator/Devices/0B8D64B5-9593-4F86-BBD3-E408682C5C0F/data/Containers/Data/Application/011E4805-40EB-4221-9D7D-1C1D64660186/Documents/75.9226ecd6893cb01a306c974d9d8ffd62803109c1.png"
这是模拟器上的完整路径,只是缺少文件模式 (file://),我认为使用 NSURL fileURLWithPath 应该没问题。
如果您的文档中已有 PNG 文件,那么您需要做的就是这个。
(假设cell.albumImage是UIImageView)
let imageFileName = "75.9226ecd6893cb01a306c974d9d8ffd62803109c1.png"
cell.albumImage.image = UIImage(named: imageFileName)
检查文件是否存在:
func fileExists(filePath: String) -> Bool {
let filemanager = NSFileManager.defaultManager()
if filemanager.fileExistsAtPath(filePath) {
return true
}
return false
}
我最终找到了与这个问题的方向无关的问题的解决方案。结果发现问题出在我重写了 UITableViewCell class 中的 prepareForReuse 方法。谢谢大家的建议。
我正在尝试将使用 Alamofire 下载的图像加载到文档目录中。我将文件名存储在 Realm 数据库中。一旦到了显示图像的时间,我就获取文档目录的路径并附加文件名。不过,此路径似乎不适用于构建 UIImage。
if let name = playlist.RLMsongs[indexPath.row].name, let imageURL = playlist.RLMsongs[indexPath.row].album?.image?.getImageURL(.SmallImage), let fileName = playlist.RLMsongs[indexPath.row].album?.image?.smallLocalFileName {
cell.songName.text = name
let range = imageURL.rangeOfString("http")
if let theRange = range where theRange.startIndex == imageURL.startIndex { // imageURL starts with "http" (remote url)
cell.albumImage.sd_setImageWithURL(NSURL(string: imageURL), placeholderImage: UIColor.imageFromColor(UIColor.grayColor())) {
_ in
cell.albumImage.fadeIn(completion: nil)
}
} else {
cell.albumImage.image = UIImage(named: fileName) // images still do not load
// tried this first -> cell.albumImage.sd_setImageWithURL(NSURL(fileURLWithPath: imageURL), placeholderImage: UIColor.imageFromColor(UIColor.grayColor()))
}
}
这是构建路径的位(上面的 imageURL):
let documentsDir = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0]
let path = documentsDir.URLByAppendingPathComponent(localFile).path
return path
根据 TiM 的建议,我在断点处检查了 imageURL 的值,它看起来很好:
imageURL: "/Users/danielnall/Library/Developer/CoreSimulator/Devices/0B8D64B5-9593-4F86-BBD3-E408682C5C0F/data/Containers/Data/Application/011E4805-40EB-4221-9D7D-1C1D64660186/Documents/75.9226ecd6893cb01a306c974d9d8ffd62803109c1.png"
这是模拟器上的完整路径,只是缺少文件模式 (file://),我认为使用 NSURL fileURLWithPath 应该没问题。
如果您的文档中已有 PNG 文件,那么您需要做的就是这个。
(假设cell.albumImage是UIImageView)
let imageFileName = "75.9226ecd6893cb01a306c974d9d8ffd62803109c1.png"
cell.albumImage.image = UIImage(named: imageFileName)
检查文件是否存在:
func fileExists(filePath: String) -> Bool {
let filemanager = NSFileManager.defaultManager()
if filemanager.fileExistsAtPath(filePath) {
return true
}
return false
}
我最终找到了与这个问题的方向无关的问题的解决方案。结果发现问题出在我重写了 UITableViewCell class 中的 prepareForReuse 方法。谢谢大家的建议。