2017-09-15 5 views
0

私のアプリの人は時々何かのステータスを更新する必要があります。今では2つのものを選ぶことができます:いわゆる "Rollerbank"がまだあるか、 "Rollerbank"が削除されています。ユーザーはデータ参照を作成することができます。 childbyAutoIDによって作成されるIDです。今すぐ私の質問は、適切な子供を取得し、いくつかの子供を値で更新する方法です。私のポスト:TableViewCellためFirebase:既にchildbyAutoIDで作成された子供にデータを入力する方法

class Post { 
    let ref: DatabaseReference! 
    var TypeControle: String = "" 
    var Stad: String = "" 
    var Tijd: String = "" 
    var TijdControle: String = "" 
    var TijdControleniet: String = "" 
    var Latitude: String = "" 
    var Longitude: String = "" 
    var Extrainformatie: String = "" 
    var Staater: String = "" 
    var Staaternietmeer: String = "" 

    init(TypeControle: String) { 
     self.TypeControle = TypeControle 
     ref = Database.database().reference().child("Rollerbanken").childByAutoId() 
    } 
    init(Stad: String){ 
     self.Stad = Stad 
     ref = Database.database().reference().child("Rollerbanken").childByAutoId() 
    } 
    init(Tijd: String) { 
     self.Tijd = Tijd 
     ref = Database.database().reference().child("Rollerbanken").childByAutoId() 
    } 
    init(Latitude: String) { 
     self.Latitude = Latitude 
     ref = Database.database().reference().child("Rollerbanken").childByAutoId() 
    } 
    init(Longitude: String) { 
     self.Longitude = Longitude 
     ref = Database.database().reference().child("Rollerbanken").childByAutoId() 
    } 
    init(Extrainformatie: String) { 
     self.Extrainformatie = Extrainformatie 
     ref = Database.database().reference().child("Rollerbanken").childByAutoId() 
    } 
    init(Staater: String) { 
     self.Staater = Staater 
     ref = Database.database().reference().child("Rollerbanken").child("Controletest").childByAutoId() 
    } 
    init(Staaternietmeer: String) { 
     self.Staaternietmeer = Staaternietmeer 
     ref = Database.database().reference().child("Rollerbanken").childByAutoId() 
    } 
    init(TijdControle: String) { 
     self.TijdControle = TijdControle 
     ref = Database.database().reference().child("Rollerbanken").childByAutoId() 
    } 
    init(TijdControleniet: String) { 
     self.TijdControleniet = TijdControleniet 
     ref = Database.database().reference().child("Rollerbanken").childByAutoId() 
    } 

    init() { 
     ref = Database.database().reference().child("Rollerbanken").childByAutoId() 
    } 

    init(snapshot: DataSnapshot) 
    { 
     ref = snapshot.ref 
     if let value = snapshot.value as? [String : Any] { 
      TypeControle = value["TypeControle"] as! String 
      Stad = value["Stad"] as! String 
      Tijd = value["Tijd"] as! String 
      Latitude = value["Latitude"] as! String 
      Longitude = value["Longitude"] as! String 
      Extrainformatie = value["Extrainformatie"] as! String 
      Staater = value["Staater"] as! String 
      Staaternietmeer = value["Staaternietmeer"] as! String 
      TijdControle = value["TijdControle"] as! String 
      TijdControleniet = value["TijdControleniet"] as! String 

     } 
    } 

    func save() { 
     ref.setValue(toDictionary()) 
    } 

    func toDictionary() -> [String : Any] 
    { 
     return [ 
      "TypeControle" : TypeControle, 
      "Stad" : Stad, 
      "Tijd" : Tijd, 
      "Latitude" : Latitude, 
      "Longitude" : Longitude, 
      "Extrainformatie" : Extrainformatie, 
      "Staater" : Staater, 
      "Staaternietmeer" : Staaternietmeer, 
      "TijdControle" : TijdControle, 
      "TijdControleniet" : TijdControleniet 

     ] 
    } 
} 

データ:

class ControleTableViewCell: UITableViewCell { 
    @IBOutlet weak var storyControle: UILabel! 
    @IBOutlet weak var storyTijd: UILabel! 

    var post: Post! { 
     didSet { 
      storyControle.text = "\(post.Staaternietmeer)" 
      storyTijd.text = "\(post.TijdControleniet)" 
      storyControle.text = "\(post.Staater)" 
      storyTijd.text = "\(post.TijdControle)" 

     } 
    } 

私の更新ボタンがどのように見えるか:

@IBAction func Update(_ sender: Any) { 
     let alertController1 = UIAlertController(title: "Update melden" , message: "De rollerbank", preferredStyle: .alert) 

     // Create the actions 
     let RollerbankAction1 = UIAlertAction(title: "Staat er nog steeds", style: UIAlertActionStyle.default) { 
      UIAlertAction in 
      NSLog("Ja Pressed") 

      self.newStory.Staater = self.Staater 
      self.newStory.TijdControle = self.TijdControle 
      self.newStory.save() 
     } 


     let cancelAction1 = UIAlertAction(title: "Staat er niet meer", style: UIAlertActionStyle.cancel) { 
      UIAlertAction in 
      NSLog("Cancel Pressed") 

      let date = Date() 
      let calendar = Calendar.current 
      let hour = calendar.component(.hour, from: date) 
      let minutes = calendar.component(.minute, from: date) 
      let Tijd = "\(hour) : \(minutes)" 

      self.newStory.Staaternietmeer = self.Staaternietmeer 
      self.newStory.TijdControleniet = Tijd 
      self.newStory.save() 


    } 

     alertController1.addAction(RollerbankAction1) 
     alertController1.addAction(cancelAction1) 
     self.present(alertController1, animated: true, completion: nil) 
    } 

これは私が使用する構造です。このコードをすべて実行すると、新しいデータは別のchildbyAutoIDに入れられます。これは私が望むものではありません。 "Staaternietmeer"と "TijdControleniet"という名前のクリア領域の/ setvalueを更新するだけです。誰も私に助けてくれますか? Structure

+0

あなたはあなたのデータヒントのための – Siyavash

+0

感謝を更新するために、後でそれをアクセスできるようにどこかにあなたの子供の名前を格納する必要があります。しかし、それをどのように保存して後で更新することができますか? –

答えて

0

プッシュIDは、後で再利用できるようにどこかに保存する必要があります。

あなたが使用するユニークなプッシュIDを生成するには:

Database.database().reference().childByAutoId() 

そしてどこかに保存する:

let postKey = Database.database().reference().childByAutoId().key 

そして、あなたは例えばポストを共有する方法が必要で言うと、この投稿を複数のノードに追加したい場合は、次のようになります。

func sharePost(_ postContent: String, completion: @escaping (Bool) ->()) { 

    guard let currentUserId = Auth.auth().currentUser?.uid else { 
     completion(false) 
     return 
    } 

    let postKey = Database.database().reference().childByAutoId().key 

    let postData: [String: Any] = [ "content": "blabla", 
            "author": currentUserId ] 

    let childUpdates: [String: Any] = ["users/\(currentUserId)/posts/\(postKey)": true, 
             "posts/\(postKey)": postData ] 

    Database.database().reference().updateChildValues(childUpdates, withCompletionBlock: { (error, ref) in 

     guard error == nil else { 
      completion(false) 
      return 
     } 

     completion(true) 
    }) 

} 

今すぐユニークなプッシュにアクセスするID後に、あなたが使用します。

Database.database().reference().observe(.childAdded, with: { (snapshot) in 

    // Here you get the Push ID back : 

    let postKey = snapshot.key 

    // And others things that you need : 

    guard let author = snapshot.childSnapshot(forPath: "author").value as? String else { return } 
    guard let content = snapshot.childSnapshot(forPath: "content").value as? String else { return } 

    // Here you store your object (Post for example) in an array, and as you can see you initialize your object using the data you got from the snapshot, including the Push ID (`postKey`) : 

    posts.append(Post(id: postKey, content: content, author: author)) 

}) 
関連する問題