2017-03-24 4 views
1

このコードに問題があります。基本的に私は、画像を使用してテーブルセルを作成しようとしています。ここのurlフィールドの値はhttp://pbs.twimg.com/profile_images/796924570150301696/35nSG5nN_normal.jpgですが、なんらかの理由でprint( "REACHED")は決して印刷されません。どんな助け/提案も感謝しています!TVViewのセルにTableViewを割り当てるテーブル

コードスニペット:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: tIdentifier, for: indexPath) as! TweetCell 
    let tweet = tweets[indexPath.section][indexPath.row] 
    let url = tweet.user.profileImageURL! 
    print(url.absoluteString) 
    let data = try? Data(contentsOf: url) 
    if (data == nil){ 
    } else { 
     print("REACHED") 
     cell.avatarImage = UIImage(data: data!) 
    } 
    cell.tweet = tweets[indexPath.section][indexPath.row] 
    return cell 
} 
+0

'letデータ=試しますか?データ(contentsOf:url) 'それを避けてください!それはシンクロナイズでUIをブロックします。 – Larme

+0

@Larme代替アプローチに関する提案はありますか? –

+0

このライブラリは役に立ちます:https://github.com/Alamofire/AlamofireImage – Hapeki

答えて

2

これは私の仕事:

func example() { 
    let cell = UITableViewCell() 
    let url = URL(string: "http://pbs.twimg.com/profile_images/796924570150301696/35nSG5nN_normal.jpg") 

    do { 
     let data = try Data(contentsOf: url!) 
     print("REACHED") 
     cell.imageView?.image = UIImage(data: data) 
    } catch { 
     print("received this error:\n\(error.localizedDescription)") 
    } 
} 

を、それはすぐに動作しない場合は、少なくともあなたは、あなたがそれを把握するのに役立つエラーメッセージがあるでしょう。がんばろう!

編集: あなたのためにあなたがエントリを含めるためにあなたのInfo.plistを更新していることを確認してください必要があります。これがないと

のApp交通セキュリティ設定

あなたが他のサイトへのアクセスを持っていません。 。 Transport security has blocked a cleartext HTTP

+0

ファイルへのパスがありません。ファイルをロードする上記のメソッドでブレークポイントを追加します。ステップスルーして、確認してください。 – Mozahler

+0

恐ろしい!お役に立てて嬉しいです! – Mozahler

+0

'私はそれが動作して取得することができ再検討私のplistのソースコードに私をリードし、' NSAppTransportSecurityに NSAllowsArbitraryLoads を追加することで、「ファイルを開けませんエラーことができます」これは、もともと私を与えました。ありがとう@Mozahler –

0

簡単な生活のためにいくつかのヒント...

  • はあなたのセルのIBOutlet
を公開しないでくださいメインキュー
  • にダウンロードしないでください
  • アンラップを強制しないでください。
    let imageQueue = DispatchQueue(label: "imageQueue", qos: DispatchQoS.background) 
    
    class TweetCell: UITableViewCell { 
    
        @IBOutlet fileprivate var avatarImage: UIImageView! 
    
        var tweet: Tweet {   
         didSet { 
          guard let url = tweet.user.profileImageURL else { return } 
    
          loadImage(url: url) 
         } 
        } 
    
        fileprivate func loadImage(url: URL) { 
         imageQueue.async { 
    
          do { 
           let data = try Data(contentsOf: url) 
    
           DispatchQueue.main.async { 
            self.avatarImage.image = UIImage(data: data)   
           } 
    
          } catch { 
           // Handle error 
          }  
         } 
        } 
    } 
    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
        let cell = tableView.dequeueReusableCell(withIdentifier: tIdentifier, for: indexPath) as! TweetCell 
        cell.tweet = tweets[indexPath.section][indexPath.row] 
        return cell 
    } 
    
    関連する問題