2017-01-14 12 views
0

したがって、現在、API呼び出しに基づいてカスタムセルを持つテーブルビューを作成しようとしています。データを取り込むと、テーブルビューがリロードされます。それはどれくらいのセルを持っているかに基づいてデータを持っていますが、それぞれが空です。私は人々が持っていたいくつかの同様の問題を見てきましたが、修正を見つけることができません。どんな助けも素晴らしいだろう、ありがとう!TableView Swift 3でブランクを返すカスタムセル

私は自分のAPIを呼び出し、必要なデータを収集します。その後、私はテーブルビューをリロードします。ここで

class SearchViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

@IBOutlet var tableView: UITableView! 
@IBOutlet var typeSwitch: UISegmentedControl! 
@IBOutlet var searchBar: UITextField! 
var timeoutTracker = 0 
var items: [String] = [] 
var count = 1 
func searchCall() { 
    Alamofire.request("http://www.plex.dev/api/search/" + type + "/" + searchBar.text!).responseJSON { response in 
     debugPrint(response) 
     if response.response == nil { 
      self.timeoutTracker = self.timeoutTracker + 1 
      if self.timeoutTracker == 5 { 
       self.timeoutTracker = 0 
       self.popUp() 
      } 
      else { 
       sleep(2) 
       self.searchCall() 
      } 
     } 
     if let json = response.result.value { 
      let jsonTest = JSON(json) 
      for x in jsonTest["results"] { 
       if let title = x.1["title"].string { 
        self.items.append(title) 
        self.tableView.delegate = self 
        self.tableView.dataSource = self 
        self.tableView.reloadData() 
       } 
      } 
     } 
    } 
} 
func tableView(_ tableView:UITableView, numberOfRowsInSection section:Int) -> Int 
{ 
    return self.items.count 
} 

func numberOfSectionsInTableView(tableView: UITableView) -> Int 
{ 
    return 1 
} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
{ 
    var cell = self.tableView.dequeueReusableCell(withIdentifier: "cell")! as! MovieCell 
    cell.movieTitle?.text = self.items[indexPath.row] 
    cell.moviePoster?.image = #imageLiteral(resourceName: "avatar.png") 
    return cell 
} 

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    print("You selected cell #\(indexPath.row)!") 
} 

カスタムセルクラスは

import UIKit 

class MovieCell: UITableViewCell { 

    @IBOutlet var moviePoster: UIImageView! 
    @IBOutlet var movieTitle: UILabel! 
    @IBAction func addMovie(_ sender: AnyObject) { 
    } 

} 
ここ

である私の絵コンテです:私はそれがないことを願う enter image description here

enter image description here

そして、ここでは私の空白のテーブルビューであります明らかな何か、しかしどちらかの方法で助けてくれてありがとう!

EDIT:「セル」以外の何かに私の識別子を変更することが

答えて

0

あなたはsearchCall()のどこを呼び出しているトリックを行うように見えましたか?後: も(それが良いコードの練習である)

EDIT)を(のviewDidLoadで

tableView.delegate = self 
tableView.dataSource = self 

を宣言するためにあなたを示唆してSearchViewControllerのとSearchViewControllerの拡張として代表者とのUITableViewのデータソースを追加しますあなたのcellForRowAtで再び見て:しようとすると、以下の

let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! MovieCell 

でコードを交換しないで使用し、ここでself.tableView

編集2:デフォルトのセル識別子 'cell'を使用すると問題が発生することがあるので、 'movieCell'などの別のものを使用することをお勧めします。

+0

私はそれを呼び出していると私も()のviewDidLoadでそれらの両方を持っているにコンセントを接続していません。何らかの理由で問題になった場合に備えて、もう一度追加しましたが、何も変更されませんでした。 –

+0

それらを関数から削除して、viewDidLoad()でのみ保持してください。あなたのデータソースコードは問題ないようです。コードにいくつかのブレークポイントを追加して、必要なすべてのデータをロードした後にtableViewが更新されているかどうかを確認し、項目[indexPath.row]をチェックしてNSLogを使用して実際に値が – John

+0

編集しても何も変わっていないようです。私はチェックし、tableview関数は、forループのすべてのインクリメントで呼び出されている –

0

テーブルビューにクラスまたはペン先を登録していると思われますプロトタイプのセルを使用するときは、これを行うべきではありません。また、最新のdequeueReusableCell(withIdentifier: String , for indexPath: IndexPath)を使用する必要があります。また、私は今までsleepと呼ぶ誘惑に抵抗するでしょう。

+0

私はテーブルビューを登録する代わりに何をすべきですか?そして睡眠の代わりに何をお勧めしますか?助けてくれてありがとう! –

+0

プロトタイプセルが自動的に登録されます。なぜあなたは最初に睡眠を呼んでいますか? 'dequeueReusableCell(withIdentifier:String)'はオプションです。 'dequeueReusableCell(withIdentifier:String、indexPath:IndexPath)'は、初期化されたセルを返すことが保証されています。 'dequeueReusableCell(withIdentifier:String、indexPath:IndexPath)'が2012年に導入されたので、それを使用することをお勧めします。 'dequeueReusableCell(withIdentifier:String)'は古いものです。 – beyowulf

0

あなたがセルにクラスを与えると、細胞

+0

はいそれは正しいクラスであり、接続されました –

+0

メインスレッドでリロードテーブルビューを試しました –

+0

いいえ、リロードが機能しています。私はそれを実行すると、私のtableview関数は、それぞれの新しいデータのために呼び出される。それは表示されません。 –

関連する問題