2016-11-23 10 views
0

グループでチャットアプリケーションを作成しようとしています。ユーザーがグループを削除できるようにする必要があります。私はすべてを作ったし、一つのことを除いて働いた。ユーザーがグループを削除し、別の名前のグループを作成する場合。ユーザーには削除されたグループ名が表示され、新しいグループ名は表示されません。ユーザーがグループをクリックすると、その名前が新しいグループ名に更新されます。誰もがこれを修正する方法を知っていますか?私は、誰かが私を助けることができることを願っていますテーブルビューで削除されたデータが返されます

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 
} 

:セルのコードを作成します

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() 
    } 
} 

グループでは、コードを削除します!ありがとう。

+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

お手数をおかけしていただきありがとうございます!私はちょうどそれを試みたが、まだ問題を修正しなかった。 –

関連する問題