kurbs
kurbs

Reputation: 23

Filter Firebase data Swift

I want to load every image of type Modern on Firebase with Swift. How can I do it?

Here's my data model:

"arts" : {
    "-KW5plrmDFMGa9pUlTg3" : {
   "description" : "Title ",
   "height" : 25.36023,
   "imageUrl" : "https://firebasestorage.googleapis.com/v0/b/medici-b6f69.appspot.com/o/Arts%2FJ7U039FN6YckdbQ7KgeJKuZDO2I3%2F26DDC192-C081-4588-BD52-2841FA3EF507?alt=media&token=e828936c-5341-4429-94e9-c3aefa81769b",
   "postDate" : 1478657252917,
   "title" : "Title ",
   "type" : "Modern",
   "width" : 25.99424
}

Here's what I tried. But it's not working.

DataBase.child("arts").queryOrdered(byChild: "Modern").observe(.value) { (snapshot: FIRDataSnapshot) in
    self.posts = []

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

        for snap in snapshot {
            if let postDict = snap.value as? Dictionary<String, AnyObject> {
                let key = snap.key
                let post = ProfileArtModel(key: key, artData: postDict)
                self.posts.insert(post, at: 0)
            }
        }
    }
    self.tableView.reloadData()
}

Upvotes: 2

Views: 1007

Answers (2)

Ashvini
Ashvini

Reputation: 352

  • Your queryOrdered is in wrong format. Also you are always inserting an object into your self.posts array at 0 index, so your array is always replacing an object of 0 position. So you can modify your code as below:

    self.posts = []
    DataBase.child("arts").queryOrdered(byChild: "type").queryEqual(toValue : "Modern").observe(.value) { (snapshot: FIRDataSnapshot) in
        if let snapshot = snapshot.children.allObjects as? [FIRDataSnapshot] {
            print("SNAPSHOT: \(snapshot)")
            for snap in snapshot {
                if let postDict = snap.value as? Dictionary<String, AnyObject> {
                   let key = snap.key
                   let post = ProfileArtModel(key: key, artData: postDict) 
                   self.posts.append(post)           
                }
            }
            self.tableView.reloadData()               
        }
    }
    

Upvotes: 0

Dravidian
Dravidian

Reputation: 9945

Try:-

DataBase.child("arts").queryOrdered(byChild: "type").queryEqual(toValue : "Modern").observe(.value) { (snapshot: FIRDataSnapshot) in
self.posts = []

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

    for snap in snapshot {
        if let postDict = snap.value as? Dictionary<String, AnyObject> {
            let key = snap.key
            let post = ProfileArtModel(key: key, artData: postDict)
            self.posts.insert(post, at: 0)
            self.tableView.reloadData()
        }
    }
  }
}

Upvotes: 2

Related Questions