私はXcodeで素早く素早くこのバグを見つけました。私は少しの周りを検索し、このトピックについて何も見つけることができませんでした。私は私がここでの携帯電話に画像をキャッシュすることができますUIImageの拡張子を持っている:カスタムUItableViewCellはイメージをロードしていませんか? Swift 4
import UIKit
let imageCache = NSCache<AnyObject, AnyObject>()
extension UIImageView{
func loadImageUsingCacheWithUrlString(urlString : String)
{
self.image = nil;
// check cache for image first
if let cachedImage = imageCache.object(forKey: urlString as AnyObject) as? UIImage {
self.image = cachedImage;
return
}
let url = URL(string: urlString)
URLSession.shared.dataTask(with: url!, completionHandler: { (data, response, error) in
//download hit an error
if error != nil {
print(error!)
return
}
DispatchQueue.main.async {
if let downloadedImage = UIImage(data: data!){
imageCache.setObject(downloadedImage, forKey: urlString as AnyObject)
self.image = downloadedImage
}
}
}).resume()
}
}
それは、テーブルビューのイメージビューにイメージをロードしていません:(ランダムなテキストを無視します)
ここUpdated main.storyboard screen shot
は私cellForRowAtである:ここで
もmain.storyboardからのUITableViewである私はイメージがロードされると仮定されndexPath方法:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cellid" , for: indexPath) as! CustomChatTableViewCell;
let gray = UIColor(red:0.94, green:0.94, blue:0.94, alpha:1.0)
let red = UIColor(red:1.00, green:0.22, blue:0.37, alpha:1.0)
let message = messages[indexPath.item]
if message.toId == user?.toId{
cell.messageBackground.backgroundColor = red
cell.messageLabel.textColor = UIColor.white
}
else{
cell.messageBackground.backgroundColor = gray
cell.messageLabel.textColor = UIColor.black
}
cell.messageLabel.text = message.text
if let imageUrl = message.imageUrl{
print(imageUrl)
cell.messageImage.loadImageUsingCacheWithUrlString(urlString: imageUrl)
cell.messageImage.isHidden = false;
cell.messageLabel.isHidden = true
//cell.messageBackground.isHidden = true;
}
else
{
cell.messageImage.isHidden = true;
cell.messageLabel.isHidden = false
cell.messageBackground.isHidden = false;
}
return cell;
}
期待される結果:
画像は、細胞
画像が細胞内にロードしていけないの観測結果にロードします。 ( これらのコード行:
if let imageUrl = message.imageUrl{
print(imageUrl)
cell.messageImage.loadImageUsingCacheWithUrlString(urlString: imageUrl)
実際にFirebaseデータベースの画像に有効なURL文字列を表示します。イメージをロードしていないため、混乱します。
私は私のプロジェクトの他の部分でloadImageUsingCacheWithUrlString
方法を使用して、それはそう、私は考えていない正常に動作重要
その方法....起こっていただきました!?もしあなたがこれを解決できるなら、あなたはすばらしいコーダーです!
私はmain.storyboardに画像を置くことができ、それが動作します...私は間違って行くことができるかを知らない... :(
screen shot of updated main.storyboard
画像は拡張子で罰金のようです:
code with breakpoint and console showing
ない画像がキャプチャビュー階層にアップカバーされているかどうかを確認します。
URLRequestを使用してcachePolicyオプションを設定する方が良い –
もう少し情報が役立つと思います。たとえば、実行中のコードと実行していないコードはどちらですか?それは悪い論理の単純なケースかもしれません。いくつかのブレークポイントを設定し、コードが通過する一連のイベントを明確にすることはできますか? – Malik
@Malik私は、URLがloadImageUsingCacheWithUrlStringに入っているという事実を知っています。コンソールの魔女に表示されたURLは – zackkkkkkk