2017-03-17 10 views
0

私はイメージのURLを取得し、変換してイメージに渡して、 がテーブルのセル内に作成されますが、これは空であるというエラーを返します。テーブルの中に画像を表示する際にエラーが発生しました! Swift 3

誰かが私を助けることができます!

ここに私の2つのクラスがあります。

import UIKit 

var margemPadrao : CGFloat = 10.0 
var alturaNavBar : CGFloat = 0.0 
var alturaStatusBar:CGFloat = UIApplication.shared.statusBarFrame.size.height 
var alturaTela : CGFloat = 0.0 
var larguraTela : CGFloat = 0.0 
var alturaCelula : CGFloat = 0.0 


var listaCardNovidades:[Novidades] = [] 

class NewsScreenViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

    @IBAction func menuButtonTapped(_ sender: UIBarButtonItem) { 
     toggleSideMenuView() 
    } 


    var minhaTabela:UITableView = UITableView() 
    var meuActivityIndicator:UIActivityIndicatorView = UIActivityIndicatorView() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     buscaJSON() 
     alturaTela = UIScreen.main.bounds.height 
     larguraTela = UIScreen.main.bounds.width 
     alturaNavBar = (self.navigationController?.navigationBar.frame.height)! 

     //pegando a cor da view para ser igual na tabela 
     let corViewbackground:UIColor = self.view.backgroundColor! 

     //setando o frame da tabela com altura largura e posicionamentos 
     minhaTabela.frame = CGRect(x: 0, y: 0, width: larguraTela, height: alturaTela) 

     meuActivityIndicator.frame = minhaTabela.frame 

     minhaTabela.delegate = self 
     minhaTabela.dataSource = self 

     //backgroundo color da tabela 
     minhaTabela.backgroundColor = corViewbackground 

     //retirando as linhas da tabela 
     minhaTabela.separatorStyle = UITableViewCellSeparatorStyle.none 

     minhaTabela.register(CelulaCard.self, forCellReuseIdentifier: "CelularCard") 
     minhaTabela.scrollsToTop = false 

     meuActivityIndicator.startAnimating() 
     meuActivityIndicator.hidesWhenStopped = true 

     self.view.addSubview(minhaTabela) 
     minhaTabela.isHidden = true 
     self.view.addSubview(meuActivityIndicator) 

    } 


    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return listaCardNovidades.count 
    } 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

     let celula = minhaTabela.dequeueReusableCell(withIdentifier: "CelularCard", for: indexPath) as! CelulaCard 

     celula.textoTitulo.text = listaCardNovidades[indexPath.row].titulo 
     //celula.self.caminhoImagem = listaCardNovidades[indexPath.row].imagem 
     celula.self.caminhoImagem = listaCardNovidades[indexPath.row].imagem 

     return celula 
    } 

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 

     return alturaCelula 
    } 

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     minhaTabela.deselectRow(at: indexPath, animated: true) 

    } 



    /*FUNÇÃO PARA CARREGAR O JSON*/ 

    func buscaJSON(){ 
     let configuration = URLSessionConfiguration.default 
     let session = URLSession(configuration: configuration) 
     let urlApi = "https://www.floratilemevidencia.com.br/wp-json/wp/v2/download?filter[pagina]=ultimas-novidades" 
     if let url = URL(string: urlApi) { 
      session.dataTask(with: url, completionHandler: { (data, response, error) -> Void in 
       if error != nil{ 
        print("The error is: \(error!)") 
        return 
       }else if let jsonData = data { 
        do{ 
         let parsedJSON = try JSONSerialization.jsonObject(with: jsonData, options: []) as! [[String:AnyObject]] 
         //print(parsedJSON) 
         for json in parsedJSON{ 
          guard let dados = json["title"] as? [String:AnyObject] else {return} 
          let n = Novidades() 
          n.titulo = dados["rendered"] as! String 
          n.imagem = json["thumbnail_pdf"] as! String 
          n.arquivo = json["arquivo"] as! String 

          listaCardNovidades.append(n) 

         } 

         DispatchQueue.main.async { 
          self.minhaTabela.isHidden = false 
          self.minhaTabela.reloadData() 
          self.meuActivityIndicator.stopAnimating() 
         } 
//      for item in listaCardNovidades{ 
//       print (item.arquivo) 
//       print (item.imagem) 
//       print (item.titulo) 
//       print ("-------------------------------------------") 
//      } 
        } catch let error as Error{ 
         print(error.localizedDescription) 
        } 
       } 

      }).resume() 
     } 
    } 

} 







//Second Class 



import UIKit 


class CelulaCard: UITableViewCell { 

    var caminhoImagem:String = "" 

    var imagemPdfWebView:UIImageView = UIImageView() 
    var textoTitulo:UILabel = UILabel() 


    var fundoCard:UIView = UIView() 
    var indicador:UIActivityIndicatorView = UIActivityIndicatorView() 


    override init(style: UITableViewCellStyle, reuseIdentifier: String?) { 
     super.init(style: style, reuseIdentifier: reuseIdentifier) 

     self.contentView.backgroundColor = UIColor(red: 0.236424, green: 0.610663 , blue: 0.374416, alpha: 1) 

     fundoCard.frame = CGRect(
      x: margemPadrao, 
      y: margemPadrao, 
      width: larguraTela-2*margemPadrao, 
      height: 360 
     ) 

     fundoCard.backgroundColor = UIColor.white 
     fundoCard.layer.cornerRadius = 8.0 


     imagemPdfWebView.frame = CGRect(
      x: fundoCard.frame.minX+margemPadrao, 
      y: fundoCard.frame.minY+margemPadrao, 
      width: fundoCard.frame.size.width-2*margemPadrao, 
      height: fundoCard.frame.size.height-6*margemPadrao 
     ) 

     self.indicador.frame = self.imagemPdfWebView.frame 
     indicador.startAnimating() 
     indicador.hidesWhenStopped = true 

     textoTitulo.frame = CGRect(
      x: imagemPdfWebView.frame.minX, 
      y: imagemPdfWebView.frame.maxY+5, 
      width: imagemPdfWebView.frame.size.width, 
      height: 20 
     ) 

     alturaCelula = fundoCard.frame.size.height+2*margemPadrao+20 


     textoTitulo.textAlignment = .center 
     textoTitulo.textColor = UIColor.darkGray 
     textoTitulo.font = UIFont(name: "Arial", size: 17) 


     imagemPdfWebView.backgroundColor = UIColor.clear 
     imagemPdfWebView.contentMode = .scaleAspectFit 
     imagemPdfWebView.clipsToBounds = true 

     //Para mudar a cor de quando é selecionado 
     let bgColorView:UIView = UIView() 
     bgColorView.backgroundColor = UIColor.black 
     self.selectedBackgroundView = bgColorView 

     /*teste*/ 
     print("AKI ->\(caminhoImagem)") 

     self.addSubview(fundoCard) 
     self.addSubview(indicador) 


     self.addSubview(imagemPdfWebView) 
     self.addSubview(textoTitulo) 



     carregarImagemUrl(imageUrl: caminhoImagem) 

    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 


    override func layoutSubviews() { 
     super.layoutSubviews() 



     //  let urlImagem : URL = URL(string: caminhoImagem)! 
     //  let net:NetworkService = NetworkService(url: urlImagem) 
     // 
     //  net.downloadImage { (imageData) in 
     //   var minhaImg:UIImage = UIImage(data: imageData)! 
     //   DispatchQueue.main.async { 
     //    self.imagemPdfWebView.image = minhaImg 
     // 
     //   } 
    } 
    func carregarImagemUrl(imageUrl:String){ 
     let url = URL(string: imageUrl)! 
     let task = URLSession.shared.dataTask(with: url) { (responseData, responseUrl, error) -> Void in 
      if let imageData = responseData{ 
       DispatchQueue.main.async(execute: {() -> Void in 
        self.imagemPdfWebView.image = UIImage(data : imageData) 
       }) 
      } 
     } 
     task.resume() 
    } 

    //  let url = URL(string: self.caminhoImagem) 
    //  let data = NSData(contentsOf:url!) 
    // 
    //  // It is the best way to manage nil issue. 
    //  if (data?.length)! > 0 { 
    //   self.imagemPdfWebView.image = UIImage(data:data! as Data) 
    //  } else { 
    //   // In this when data is nil or empty then we can assign a placeholder image 
    //   print("Não foi possível ERRO") 
    //  } 



} 
+1

なぜこれを行うにはSDWebImageやAlamofireを使用しないのですか? –

+0

私のコードにalamofireを実装するにはどうすればいいですか? – Ghost

+0

これをチェックしてくださいhttps://www.raywenderlich.com/147086/alamofire-tutorial-getting-started-2 –

答えて

0

まず、カスタムセルを正しく登録する必要があると思います。

var nibName = UINib(nibName: "CelularCard", bundle:nil) 
self.tableView.register(nibName, forCellReuseIdentifier: "CelularCard") 

次に、イメージローダーライブラリを使用して、イメージをURLを使用してイメージビューに読み込む必要があります。私は使用することをお勧めしますKFSwiftImageLoader

let imageURL= listaCardNovidades[indexPath.row].imagem 
celula.self.caminhoImagem.loadImage(urlString: imageURL) 
関連する問題