2017-09-23 107 views
0

除了行索引路徑的單元格外,所有tableview函數都在工作。沒有調用索引路徑行處的空tableview單元格

也許問題食品數組是空的,所以對於行數爲0,因此在指數路徑行的單元格不叫

@IBOutlet weak var foooods: UITableView! 
var databaseref = Database.database().reference() 
var img : AnyObject? 
var foods = [String?]() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.databaseref.child("basic food").observe(.childAdded, with: {(snap: DataSnapshot) in 
     let snapp = snap.value as! [String:AnyObject] 
     if let x = snapp["name"] as! String? { 
      self.foods.insert(x, at: 0) 
      //self.foods.append(x) 
     } 
    }) 
    self.foooods.reloadData() 
} 

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

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

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    print("difufuehf") 
    let cell : foodsTableViewCell = tableView.dequeueReusableCell(withIdentifier: "aupa", for:indexPath) as! foodsTableViewCell 
    print("fufvksdfvysdgfvjdsgfdsygfvds,jhvjsdvsdjvguydsfgdsylfgdsyfgsdlygfsiygf") 
    if let foo = foods[indexPath.row] { 
     print(foo) 
     cell.food.text = foo 
    } 
    return cell 
} 
+2

您在完成塊之外調用'reloadData'而不是在裏面。 – rmaddy

+1

值得注意的是,如果完成塊在後臺隊列上運行,則應將重新加載到主隊列中。 – Losiowaty

+0

我插入行後,它給了我一個sigbart –

回答

1

這必須是重複的,但我不能找到一個。

你的問題是你打電話給reloadData在錯誤的地方,導致它被稱爲太早。更新數據模型後,您需要在完成塊內調用它。

而且您需要確保它在主隊列中被調用。

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.databaseref.child("basic food").observe(.childAdded, with: {(snap: DataSnapshot) in 
     if let snapp = snap.value as? [String:Any], let x = snapp["name"] as? String { 
      self.foods.insert(x, at: 0) 
      //self.foods.append(x) 

      DispatchQueue.main.async { 
       self.foooods.reloadData() 
      } 
     } 
    }) 
} 

請注意,我也修正了獲得值的方式。你真的需要避免武力解開和強制施法。

+0

我加了這個,但是有一個sigbart錯誤,我試圖知道哪一行,但行func中的單元格被稱爲 –

+0

究竟是哪一行導致錯誤? – rmaddy

+0

它的工作非常感謝你))) –

相關問題