我正在使用以下代码来检索一些数据,但问题是每次我运行应用程序时,我都会以不同的顺序接收数据:
[PFGeoPoint geoPointForCurrentLocationInBackground:^(PFGeoPoint *geoPoint, NSError *error) {
if (!error) {
NSDate *currentDate = [NSDate date];
__block PFQuery *query = [[PFQuery alloc] initWithClassName:@"orders"];
[query setLimit:25];
[query whereKey:@"location" nearGeoPoint:geoPoint withinKilometers:kilometers];
[query whereKey:@"createdAt" lessThanOrEqualTo:currentDate];
[query orderByDescending:@"createdAt"];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (objects.count > 0) {
[self.flebData removeAllObjects];
[self.flebData addObjectsFromArray:objects];
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];
[self.tableView.pullToRefreshView stopAnimating];
// once refresh, allow the infinite scroll again
self.tableView.showsInfiniteScrolling = YES;
});
}
query = nil;
}];
}
}];
这是错误还是我的代码有问题?
最佳答案
根据PFQuery docs ,大多数位置限制,特别是 whereKey:nearGeoPoint:
、whereKey:nearGeoPoint:withinMiles:
、whereKey:nearGeoPoint:withinKilometers:
和 whereKey:nearGeoPoint:withinRadians:
,强制查询返回结果“按距引用点的距离(从最近到最远)排序”;因此,如果您的位置发生变化,结果顺序也会发生变化。
但是位置约束whereKey:withinGeoBoxFromSouthwest:toNortheast:
不会对结果强制执行任何距离排序算法。因此,正如 Paulw11 在他的评论中链接到的答案所指出的那样,您可以将该方法与 [query orderByDescending:@"createdAt"];
一起使用以获得您想要的结果顺序。
不过,您的潜在问题是 whereKey:withinGeoBoxFromSouthwest:toNortheast:
方法在正方形内检查,whereKey:nearGeoPoint:withinKilometers:
在圆内检查半径,它们通常是不同的方法。
因此,如果在该圆千米半径内找到点并且将结果按创建顺序排序对您很重要,也许您应该对您的结果
进行排序在通过查询找到它们之后,例如:
PFQuery *query = [[PFQuery alloc] initWithClassName:@"orders"];
[query setLimit:25];
[query whereKey:@"location" nearGeoPoint:geoPoint withinKilometers:kilometers];
[query whereKey:@"createdAt" lessThanOrEqualTo:currentDate];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (objects.count > 0) {
createdAtDescriptor = [[NSSortDescriptor alloc] initWithKey:@"createdAt" ascending:NO];
sortDescriptor = [NSArray arrayWithObject:createdAtDescriptor];
self.flebData = [objects sortedArrayUsingDescriptors:sortDescriptor];
关于ios - PFQuery接收不同的数据顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27515412/