2016-08-30 17 views
2

現在、Firebaseを使用して、人のデータとその詳細を保存しています。これは私が私のtableViewを移入するために、データベースから詳細を取得する方法である:私のユーザーのテーブルビューからFirebaseからノードを削除する方法

let ref = FIRDatabase.database().reference().child("Users") 
    ref.observeEventType(.ChildAdded, withBlock: 
    { (snapshot) in 

     if let firstname = snapshot.value?.objectForKey("firstname"), lastname = snapshot.value?.objectForKey("lastname") 
     { 
      let fullname = "\(firstname) \(lastname)" 
      self.names.append(fullname) 
      self.tableView.reloadData() 
     } 

    }, withCancelBlock: nil) 

それぞれ独自のユニークなIDを持っている、と私はそれに応じてそれらを削除しようとしています。これまでのところ私は、データベースからのtableViewの端からではなく、私のユーザーを削除します。私のobservePeople()関数で

override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) 
{ 
    if editingStyle == .Delete 
    { 
     names.removeAtIndex(indexPath.row) 
     tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade) 

     //Delete from firebase 
    } 
} 

を子供がそうのように削除された場合、私は観察するコードを実装:

ref.observeEventType(.ChildRemoved, withBlock: 
    { (snapshot) in 

    if let firstname = snapshot.value?.objectForKey("firstname"), lastname = snapshot.value?.objectForKey("lastname"), dateOfBirth = snapshot.value?.objectForKey("Date of Birth"), zipcode = snapshot.value?.objectForKey("Zipcode") 
    { 
     print("We deleted the person \(firstname) \(lastname) with the details: \(dateOfBirth), \(zipcode)") 
    } 

    }, withCancelBlock: nil) 

だから、誰かがテーブルビューからスワイプで削除したときに、IDに基づいて正確なユーザーを削除するにはどうすればいいですか?

答えて

1

removeValue()メソッドは、ユーザーを削除する参照先で使用できます。

ref.child("Users/\(uniqueUserID)").removeValue() 

あなたは、あなたのテーブルで削除indexPath.rowでユーザーのためのuniqueUserIDを取得する必要があります:あなたは//Delete from firebaseを書いたあなたのcommitEditingStyleテーブルビュー方法、でそう

はあなたのようなものを挿入することができところでありますビュー。

あなたのJSONツリーがあなたのユーザーのためにどのように見えるかの例をタイプすれば、さらに詳しく説明できます。

このようなものですか?

"root" 
    "Users" 
     "uniqueUserID" 
      "firstname" 
      "lastname" 
      "dateOfBirth" 
      "zipcode" 

EDIT あなたの辞書には、私はこのようなものだろう上に何があるかのように見える場合://Delete from firebaseを書いたcommitEditingStyleテーブルビュー方式で

//names will be the array that stores the user data that you retrieve from Firebase 
//names will be an array of dictionaries 
//each dictionary will represent a user object that includes firstname, lastname, AND uniqueUserID 
self.names = [[String : AnyObject]]()//make a new clean array 
//create a dictionary to store the user data 
let user = snapshot.value as! [String: AnyObject] 
//get the uniqueUserID which is the `snapshot.key` 
let uniqueUserID = snapshot.key as! String 
//add the uniqueUserID to the user dictionary 
user["uniqueUserID"] = uniqueUserID as! String 
self.name.append(user) 
self.tableView.reloadData() 

ref.observeEventType(.ChildAdded

を:

//get the user at the `index.row` in the names array 
let user: [String: AnyObject] = self.names[indexPath.row] 
let uniqueUserID = user["uniqueUserID"] 
//get the uniqueUserID 
let ref = FIRDatabase.database().reference() 
//remove that user at that uniqueUserID 
ref.child("Users/\(uniqueUserID)").removeValue() 
+0

はい、これはツリーの外観です –

0

フルネームを照合することで、ユーザーの一意のIDであるスナップショットのキーを見つけることができました。しかし、私はアイテムを削除した後、インデックスを削除して1つのアイテムが残り、「インデックス外のエラー」を取得するエラーに遭遇しました。

let ref = FIRDatabase.database().reference().child("Users") 
     ref.observeEventType(.ChildAdded, withBlock: { (snapshot) in 

      if let firstname = snapshot.value?.objectForKey("firstname"), lastname = snapshot.value?.objectForKey("lastname") 
      { 
       let fullname = "\(firstname) \(lastname)" 
       let currentName = self.names[indexPath.row] 

       if fullname == currentName 
       { 
        print("We have a match") 
        let currentKey = snapshot.key 
        ref.child(currentKey).removeValue() 

        dispatch_async(dispatch_get_main_queue()) 
        { 
         self.tableView.reloadData() 
        } 
       } 

      } 

     }, withCancelBlock: nil) 
関連する問題