我需要在同一个Parse查询中做两件事。 1)我需要找到给定查询返回的对象总数; 2)仅显示前20个对象。我不能通过设置query.limit = 20
来做到这两点,因为对象的总数只有20个。如果对象的总数是100,我需要得到这个数字。
那么,我怎样才能以编程方式只显示前20个对象,同时仍然接收所有100个对象?
var query = PFQuery(className: "Professions")
query.whereKey("user", equalTo: PFUser.currentUser()!.username!)
query.orderByDescending("createdAt")
// query.limit = 20
query.findObjectsInBackgroundWithBlock({ (objects, error) -> Void in
if error == nil {
if let objects = objects as? [PFObject] {
for object in objects {
// I tried using something like:
// for var i = 0; i <= 20; i++ {
// if object[i] {
// But get 'Int' is not convertible to 'String'
if let title = object["title"] as? String {
println(title)
}
}
}
} else {
println(error)
}
})
当我尝试设置以下内容时,我总是得到fatal error: array index out of range.
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 20
}
答案 0 :(得分:0)
也许不是最优雅的解决方案,但我认为你需要在同一个查询上做两个查询。一个用于object.count
,另一个用于query.limit
。
var query = PFQuery(className: "Professions")
query.whereKey("user", equalTo: PFUser.currentUser()!.username!)
query.orderByDescending("createdAt")
query.findObjectsInBackgroundWithBlock({ (objects, error) -> Void in
if error == nil {
if let objects = objects as? [PFObject] {
var numberOfObjects = objecs.count
}
else {
println(error)
}
query.limit = 20
query.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]?, error: NSError?) -> Void in
if error == nil {
if let objects = objects as? [PFObject] {
for object in objects {
if let title = object["title"] as? String {
println(title)
}
}
}
else {
println(error)
}
}
})
答案 1 :(得分:0)
首先,如果您只需要计算对象,Parse has a method for that:
query.countObjectsInBackgroundWithBlock
然后你可以发出另一个PFQuery
来获得前20个对象。获取所有对象只是为了在本地计算它们是糟糕的设计。
尽管如此,如果您仍然有充分的理由检索所有对象(受到Parse在1000处的限制)并在本地处理它们,那么在获取所有对象后,在本地获取前20个Parse,it's done in Swift对象。
var fetchedProfessions = [PFObject]()
var query = PFQuery(className: "Professions")
query.whereKey("user", equalTo: PFUser.currentUser()!.username!)
query.orderByDescending("createdAt")
query.limit = 100
query.findObjectsInBackgroundWithBlock({ (objects, error) -> Void in
if error == nil {
if let objects = objects as? [PFObject] {
// Capture your results
self.fetchedProfessions = objects
}
} else {
print(error)
}
})
// Get the first 20
let firstTwentyProfessions = retrievedObjects[0..19]