2017-12-04 8 views
0

私は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() 
    } 
} 

それは、テーブルビューのイメージビューにイメージをロードしていません:(ランダムなテキストを無視します)

Table view not loading image

ここ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

ない画像がキャプチャビュー階層にアップカバーされているかどうかを確認します。

View Hierarchy

+0

URLRequestを使用してcachePolicyオプションを設定する方が良い –

+0

もう少し情報が役立つと思います。たとえば、実行中のコードと実行していないコードはどちらですか?それは悪い論理の単純なケースかもしれません。いくつかのブレークポイントを設定し、コードが通過する一連のイベントを明確にすることはできますか? – Malik

+0

@Malik私は、URLがloadImageUsingCacheWithUrlStringに入っているという事実を知っています。コンソールの魔女に表示されたURLは – zackkkkkkk

答えて

0

あなたのストーリーボードでは、imageView messageImageはビューmessageBackgroundのサブビューです。あなたはmessageBackgroundが隠されているので

if let imageUrl = message.imageUrl{ 
    print(imageUrl) 
    cell.messageImage.loadImageUsingCacheWithUrlString(urlString: imageUrl) 

    cell.messageImage.isHidden = false; 
    cell.messageLabel.isHidden = true 
    cell.messageBackground.isHidden = true; //THIS IS THE CULPRIT 

} 

を非表示にmessageBackgroundを設定しているあなたのif-statementcellForRowでの方法では、それのサブビューも同様に隠されています。ここでビジネスロジックを再考する必要があります。

+0

コメントは議論の対象外です。この会話は[チャットに移動]されています(http://chat.stackoverflow.com/rooms/160452/discussion-on-answer-by-malik-custom-uitableviewcell-not-loading-image-swift-4)。 – Andy

関連する問題