Swift Firebase QueryLimitedToFirst

Lukas Bimba спросил: 14 ноября 2017 в 06:18 в: ios

Привет! Я пытаюсь ограничить подачу двумя последними сообщениями пользователей. Я читал документацию по Firebase, и там было сказано просто добавить "queryLimited (toFirst: Int)", и пока он не работал, мой фид по-прежнему получает все сообщения от каждого пользователя. В самом верху я реализовал "queryLimited".

Редактировать

То, как мой код прямо сейчас, ограничивает только пользователей а не посты (дерево json ниже), так как я могу изменить его, чтобы ограничить количество постов каждого пользователя?

func getAllPosts(refreshing: Bool, refreshControl: UIRefreshControl?) {
    let ref = Database.database().reference().child("posts").queryLimited(toFirst: 2)
    MBProgressHUD.showAdded(to: self.view, animated: true)
    ref.queryOrdered(byChild: "businessName").observe(.childAdded, with: { snapshot in
        //observeSingleEvent(of: .value, with: { snapshot in
        if let dict = snapshot.value as? NSDictionary {
            self.feeds = []
            for item in dict {
                let json = JSON(item.value)
                let uid = json["uid"].stringValue
                var name: String = json["businessName"].stringValue
                let address: String = json["businessStreet"].stringValue
                let state: String = json["businessCity"].stringValue
                let caption: String = json["caption"].stringValue
                let downloadURL: String = json["download_url"].stringValue
                let timestamp = json["timestamp"].doubleValue
                let date = Date(timeIntervalSince1970: timestamp/1000)
                let postID: String = json["postID"].stringValue                let lat = json["businessLatitude"].doubleValue
                let long = json["businessLongitude"].doubleValue
                let businessLocation = CLLocation(latitude: lat, longitude: long)                let latitude = self.locationManager.location?.coordinate.latitude
                let longitude = self.locationManager.location?.coordinate.longitude
                let userLocation = CLLocation(latitude: latitude!, longitude: longitude!)                let distanceInMeters: Double = userLocation.distance(from: businessLocation)
                let distanceInMiles: Double = distanceInMeters * 0.00062137
                let distanceLabelText = String(format: "%.2f miles away", distanceInMiles)                self.uid = json["uid"].stringValue                let usersReference = Database.database().reference(withPath: "users").queryOrderedByKey().queryEqual(toValue: uid)
                usersReference.observeSingleEvent(of: .value, with: { snapshot in
                    if let dict = snapshot.value as? NSDictionary {
                        let userInfo = dict.allValues[0]
                        let userJSON = JSON(userInfo)
                        name = userJSON["name"].stringValue                    }
                    let post = Post(uid: uid, caption: caption, downloadURL: downloadURL, name: name, date: date, address: address, state: state, distance: distanceLabelText, postID: postID)                    self.feeds.append(post)                    // sort posts by date/distance
                    self.feeds.sort {$0.date.compare($1.date) == .orderedDescending}
                    self.feeds.sort {$0.distance.compare($1.distance) == .orderedAscending}
                    self.feedTableView.reloadData()                })
            }
        }
        if refreshing {
            refreshControl?.endRefreshing()
        }
        MBProgressHUD.hide(for: self.view, animated: true)
    })
}

0 ответов