2017-01-31 2 views
0

My cellForRowAtIndexPath не вызывается после запуска операторов печати. Выяснилось, что мой tableView не перезагружается ... Пробовали несколько точек и до сих пор не перезагружаемся. Кто-нибудь знает, почему `Перезагрузка TableView После вызова Firebase Observer

override func viewDidLoad() { 
    super.viewDidLoad() 

    tableView.delegate = self 
    tableView.dataSource = self 


    DataService.ds.DATABASE_REF_USERS.child(CURRENTUSER!).child("cart").observe(.value, with: { (snapshot) in 

     print("check") 
     if let snapshot = snapshot.children.allObjects as? [FIRDataSnapshot] { 

      self.cartItems = [] 

      for snap in snapshot { 

       let shoeId = snap.key 

       DataService.ds.DATABASE_REF_SHOES.child("upcomingShoes").child(shoeId).observeSingleEvent(of: .value, with: { (snapshot) in 

        if let shoeData = snapshot.value as? Dictionary<String, AnyObject> { 
         let shoe = Shoe(shoeId: shoeId, shoeData: shoeData) 
         print(shoe.shoeName) 
         self.cartItems.append(shoe) 

        } 
       }) 
      } 
     } 
     self.tableView.reloadData() 
    }) 
    print(self.cartItems.count) 
} 

// ДОБАВИТЬ В МОЙ БАЗА ДАННЫХ:

@IBAction func addToCartPressed(_ sender: Any) { 

      //Under the current users, child node called "cart", I want to add the current shoes id 

      let currentUserCartRef = DataService.ds.DATABASE_REF_USERS.child(CURRENTUSER!).child("cart") 

      let shoeDataToAdd = [shoe.shoeId: true] 

      currentUserCartRef.updateChildValues(shoeDataToAdd) 


     } 

` 

Таблица Методы Посмотреть Клеточные

//Table View Methods 
func numberOfSections(in tableView: UITableView) -> Int { 
    return 1 
} 

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return cartItems.count 
} 
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    let shoe = cartItems[indexPath.row] 

    if let cell = tableView.dequeueReusableCell(withIdentifier: "cartCell", for: indexPath) as? CartCell { 

     if let shoeImage = MainVC.imageCache.object(forKey: shoe.shoeImageUrl as NSString) { 

      cell.configureCell(shoe: shoe, shoeImage: shoeImage) 
     } 
     else { 

      cell.configureCell(shoe:shoe) 
     } 
     return cell 

    } 
    else { 
     return PreviewCell() 
    } 
} 
+0

У меня есть vailalbes в верхней части моего класса: var cartItems = [Shoe]() – menan

+0

Этот оператор печати выполняется перед выполнением строки 'self.tableView.reloadData()'. Поэтому очевидно, что он выводит '0' в качестве вывода. Также вам нужно перезагрузить tableView в основном потоке. –

+0

Эй, я просто пробовал разные области, чтобы увидеть, был ли код запущен, операторы печати arent работают там или где self.tableView.reloadData() либо – menan

ответ

0

Вы можете проверить Func Tableview (Tableview: UITableView, numberOfRowsInSection раздел: Int) -> Int { } возможно, он возвращает 0 строку для вашей таблицы. Вы должны вернуть число строк больше 0, чтобы перезагрузить ячейку tableview.

+0

Эй, я обновил свой код, чтобы показать свои методы tableView. Проблема, с которой я сталкиваюсь, заключается не в перезагрузке данных. Я смог исправить это, запустив его в основном потоке, теперь у меня возникли проблемы с перезагрузкой данных при обновлении базы данных. – menan

+0

. Вы проверили массив cartItem с эффективными данными в методах делегата таблицы (numberOfRows и cellForIndexPath) после обновления базы данных. –

Смежные вопросы