2016-11-23 3 views
0

Я пытаюсь создать приложение чата с группами. Мне нужно сделать так, чтобы пользователи могли удалять группы. Я сделал все, и это сработало, за исключением одного. Если пользователь удаляет группу и создает группу с другим именем. Пользователь увидит имя удаленной группы, а не новое имя группы. Как только пользователь нажмет на группу, имя будет обновлено до нового имени группы. Кто-нибудь знает, как это исправить?Удаленные данные в виде таблицы вернутся

Группа Удалить Код:

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { 
    let cell = familyTableview.cellForRow(at: indexPath) as! FamilyTableViewCell 
    let familyName = cell.familyName.text! 

    guard let uid = FIRAuth.auth()?.currentUser?.uid else { 
     return 
    } 

    let ref = FIRDatabase.database().reference() 

    let usersReference = ref.child("Users").child(uid).child("Familys").child(familyName) 

    usersReference.removeValue { (removeError, ref) in 

     if(removeError != nil){ 
      print(removeError as Any) 
      return 
     } 
    } 

    let familyNamesReference = ref.child("Family Names").child(familyName) 

    familyNamesReference.observeSingleEvent(of: .value, with: { (snapshot) in 

     if let dictionary = snapshot.value as? [String: AnyObject] { 
      let familyUid = dictionary["UID"] as! String 

      let familysReference = ref.child("Familys").child(familyUid).child("Users").child(uid) 

      familysReference.removeValue(completionBlock: { (removeError, ref) in 

       if(removeError != nil){ 
        print(removeError as Any) 
        return 
       } 
      }) 
     } 
    }, withCancel: nil) 

    self.familys.remove(at: indexPath.row) 
    self.savedNames.removeAll() 
    self.savedFunctions.removeAll() 
    self.savedImages.removeAll() 
    self.namesOtherWay.removeAll() 

    DispatchQueue.main.async { 
     self.familyTableview.setEditing(false, animated: true) 
     self.familyTableview.deleteRows(at: [indexPath], with: .automatic) 
     self.familyTableview.reloadData() 
    } 
} 

Создать сотовый код:

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

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

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = familyTableview.dequeueReusableCell(withIdentifier: "familyCell") as! FamilyTableViewCell 

    if(savedNames[indexPath.row] != nil && savedFunctions[indexPath.row] != nil && savedImages[indexPath.row] != nil){ 
     cell.familyName.text = savedNames[indexPath.row] 
     cell.familyFunction.text = savedFunctions[indexPath.row] 
     cell.familyImage.image = savedImages[indexPath.row] 

     return cell 
    } 

    DispatchQueue.global(qos: .userInteractive).async { 
     let family = self.familys[indexPath.row] 

     cell.familyName.text = family.name 
     self.savedNames.updateValue(family.name!, forKey: indexPath.row) 
     self.namesOtherWay.updateValue(indexPath.row, forKey: family.name!) 
     cell.familyFunction.text = family.function 
     self.savedFunctions.updateValue(family.function!, forKey: indexPath.row) 

     let imageLink = family.imageLink 

     let url = URL(string: imageLink!) 
     URLSession.shared.dataTask(with: url!) { (data, response, error) in 

      if(error != nil){ 
       print(error as Any) 
       return 
      } 

      DispatchQueue.main.async { 
       if let downloadedImage = UIImage(data: data!) { 
        let image = downloadedImage 

        cell.familyImage.image = image 
        self.savedImages.updateValue(image, forKey: indexPath.row) 

        self.familyTableview.reloadData() 
       } 
      } 
     }.resume() 
    } 

    return cell 
} 

Я надеюсь, что кто-то сможет мне помочь! Благодарю.

+0

добавить метод cellforRowAtindexpath. – KKRocks

+0

@KKRocks, что вы имеете в виду? –

+0

, о котором идет речь, не имеет никакого значения для метода cellforRowAtIndexpath. средний метод табличного представления данных. – KKRocks

ответ

0

После нескольких часов работы я наконец нашел решение! Мне просто нужно было очистить текстовые поля и изображения, когда я удалил группу (ячейку).

0

Может быть, я совершенно неправильно, но должна эта часть

self.familys.remove(at: indexPath.row) 
self.savedNames.removeAll() 
self.savedFunctions.removeAll() 
self.savedImages.removeAll() 
self.namesOtherWay.removeAll() 

DispatchQueue.main.async { 
    self.familyTableview.setEditing(false, animated: true) 
    self.familyTableview.deleteRows(at: [indexPath], with: .automatic) 
    self.familyTableview.reloadData() 
} 

не внутри этой части?

familysReference.removeValue(completionBlock: { (removeError, ref) in 

      if(removeError != nil){ 
       print(removeError as Any) 
       return 
      } 
      // add the part here 
     }) 

потому что может быть, что вы перезагружаете таблицу перед тем, как наблюдатель узнает, что данные были удалены.

+0

Спасибо за помощь! Я только что попробовал, но все еще не исправил проблему. –

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