当我运行此查询时:
var query = PFQuery(className: "CardSet")
query.whereKey("user", equalTo: PFUser.currentUser())
query.includeKey("lesson")
query.orderByAscending("createdAt")
query.findObjectsInBackgroundWithBlock { (objects, error) -> Void in ........
结果永远不会按数据排序,实际上它们总是按objectId排序。
我的查询有什么问题?
这是我的解析数据,按日期排序
这是我在设备上的输出,按objectId ...
排序答案 0 :(得分:0)
有同样的问题。尝试将其添加到上面的代码块中,它对我有用:
let array:NSArray = self.queryobjectsArray.reverseObjectEnumerator().allObjects
self.queryobjectsArray = NSMutableArray(array: array)
答案 1 :(得分:0)
整个问题结束时很奇怪...... 我之前做过的,就像在同一个项目中的其他视图中一样,我从解析中获取数据并将其固定到本地存储,并调用第二种方法从本地存储中获取数据。通过这种方式,我可以从本地存储中快速访问数据,并在后台进行更新以供以后使用。
由于某种原因,从在线获取的数据按日期排序。 但是从本地引脚获取的数据不是,这就是为什么我的应用程序在错误的时间线中显示数据的原因。
我无法理解或解决这个问题,但是我通过移除本地固定来帮助自己,只是从互联网上获取数据。
我将展示原始流程是什么:
var cardSetObjects: NSMutableArray! = NSMutableArray()
override func viewDidAppear(animated: Bool) {
self.fetchAllObjectsFromLocalDatastore()
self.fetchAllObjects()
}
func fetchAllObjectsFromLocalDatastore(){
var query = PFQuery(className: "CardSet")
query.fromLocalDatastore()
query.orderByDescending("createdAt")
query.findObjectsInBackgroundWithBlock { (objects, error) -> Void in
if (error == nil){
var temp: NSArray = objects as NSArray
self.cardSetObjects = temp.mutableCopy() as NSMutableArray
self.tableView.reloadData()
}else{
println(error.userInfo)
}
}
}
func fetchAllObjects(){
var query = PFQuery(className: "CardSet")
query.whereKey("user", equalTo: PFUser.currentUser())
query.includeKey("lesson")
query.orderByDescending("createdAt")
query.findObjectsInBackgroundWithBlock { (objects, error) -> Void in
if (error == nil) {
PFObject.pinAllInBackground(objects, withName:"CardSet", block: nil)
self.fetchAllObjectsFromLocalDatastore()
self.tableView.reloadData()
}else{
println(error.userInfo)
}
}
}
我最后做的是删除fetchAllObjectsFromLocalDatastore
方法并将数据放入fetchAllObjects
中的NSMutableArray。
但我仍然想知道为什么我的代码有这个排序问题...... 也许有人会知道...