2017-01-13 11 views
1

私のサーバーから自分のJSONデータを自分のUITableViewに読み込もうとしている素早いnoobieですが、ReloadDataメソッドを呼び出すと何も起こりそうにない(CellForRowatIndexPath私の知る限りでは)。私は見つけた解決策をいくつか試しましたが(メインスレッドに入れたようなものですが)、それらはやりませんでした。だから、私は何をすべきか分からないので、誰でもこれで私を助けることができるのだろうかと思う。Swift - ReloadDataはCellForRowatIndexPathを呼び出さない

ありがとうございます。

これは私のコードです:

import UIKit 
import Alamofire 

private let reuseIdentifier = "PresenceCell" 

class PresenceController: UITableViewController { 

    @IBOutlet var presenceTableView: UITableView! 
    var presenceList = [] as [Presence] 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Add", style: .plain, target: self, action: #selector(addPresence)) 
     loadPresences(date: NSDate() as Date) 


     // Uncomment the following line to preserve selection between presentations 
     // self.clearsSelectionOnViewWillAppear = false 

     // Uncomment the following line to display an Edit button in the navigation bar for this view controller. 
     // self.navigationItem.rightBarButtonItem = self.editButtonItem() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    // MARK: - Table view data source 

    override func numberOfSections(in tableView: UITableView) -> Int { 
     return 1 
    } 

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

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: reuseIdentifier, for: indexPath) as! PresenceCell 
     let presence = presenceList[indexPath.row] 
     cell.lblPresenceName.text = presence.name 
     cell.lblPresenceTimes.text = presence.times 
     if (presence.reasons.characters.contains("S")) { 
      cell.lblPresenceSTD.isHidden = true 
     } else { 
      cell.lblPresenceSTD.isHidden = false 
     } 
     if (presence.reasons.characters.contains("M")) { 
      cell.lblPresenceMDN.isHidden = true 
     } else { 
      cell.lblPresenceMDN.isHidden = false 
     } 
     if (presence.reasons.characters.contains("C")) { 
      cell.lblPresenceEDH.isHidden = true 
     } else { 
      cell.lblPresenceEDH.isHidden = false 
     } 
     if (presence.reasons.characters.contains("L")) { 
      cell.lblPresenceLEA.isHidden = true 
     } else { 
      cell.lblPresenceLEA.isHidden = false 
     } 
     if (presence.reasons.characters.contains("T")) { 
      cell.lblPresenceTRD.isHidden = true 
     } else { 
      cell.lblPresenceTRD.isHidden = false 
     } 
     if (presence.event) { 
      cell.swPresenceEvent.isOn = true 
     } else { 
      cell.swPresenceEvent.isOn = false 
     } 
     return cell 
    } 

    func addPresence(){ 
     performSegue(withIdentifier: "addPresenceSegue", sender: self) 
    } 

    private func loadPresences(date: Date) { 
     let dateFormat = DateFormatter() 
     dateFormat.dateFormat = "dd-MM-yyyy" 
     let dateString = dateFormat.string(from: date) 
     let url = "MyUrl" + dateString 
     Alamofire.request(url, method: .get, encoding: URLEncoding.httpBody).responseJSON{ response in 
      if let json = response.result.value { 
       let dictionary = json as! [String:Any] 
       let presences = dictionary["presences"] as! NSArray 
       for index in 0..<presences.count { 
        let jsonPresence = presences[index] as! [String:Any] 
        let presence = Presence(id: jsonPresence["id"] as! Int, name: jsonPresence["name"] as! String, times: (jsonPresence["starttime"] as! String) + " - " + (jsonPresence["endtime"] as! String), reasons: jsonPresence["reasons"] as! String, event: ((jsonPresence["event"] as! Int) == 1)) 
        //add your data into tables array from textField 
        self.presenceList.append(presence) 
       } 
       DispatchQueue.main.async{ 
        self.tableView.reloadData() 
       } 
      } 
     } 
    } 
} 
+0

'reloadData'呼び出しの周りに' DispatchQueue.main.async'を削除しようとしましたか? – nathan

+0

@nathanはい、違いはありません –

+0

テーブルビューのデータソースを設定していますか?テーブルビューのフレームは0x0ですか? – nathan

答えて

1

あなたnumberOfRowsInSection方法は非常に適切ではないように見えます。これを試してください:

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return presenceList.count 
    } 
+0

ありがとうございました! –

+0

素晴らしいです。がんばろう! – PeejWeej

関連する問題