私のサーバーから自分の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()
}
}
}
}
}
'reloadData'呼び出しの周りに' DispatchQueue.main.async'を削除しようとしましたか? – nathan
@nathanはい、違いはありません –
テーブルビューのデータソースを設定していますか?テーブルビューのフレームは0x0ですか? – nathan