设置PFQuery订单

Pet*_*ter 3 ios parse-platform pfquery

我想让我PFQuery以随机顺序进入,所以下次我创建相同PFQuery的限制它不会返回与第一个相同的对象.

PFQuery *query = [PFUser query];
[query orderBy...]; //Is there a randomOrder method?
                    //Or a workaround to get random order?
[query setLimit:10];
Run Code Online (Sandbox Code Playgroud)

我每次都需要这个随机顺序,否则PFQuery每次都会包含相同的10个对象

Pau*_*w11 5

您无法更改查询中返回的数据的顺序,但您可以使用分页来更改返回的第一个对象 - 因此您可以执行类似的操作(它基于Parse的ToDo示例代码,但它可以工作任何对象) -

PFQuery *query =[PFQuery queryWithClassName:@"Todo"];

NSInteger count=[query countObjects];
NSInteger skip = arc4random_uniform(count-10);

query.skip=skip;
query.limit=10;

NSArray *results=[query findObjects];

NSLog(@"object count=%d",results.count);

for (PFObject *object in results) {
    NSLog(@"text=%@",object[@"text"]);
}
Run Code Online (Sandbox Code Playgroud)

您现在可以检索10个对象.对于任何给定的跳过计数,它们将按相同的顺序排列,但您可以在检索到10个项目后随机化订单.NSMutableArray在这个答案中简单地将它们放入并使用技术 - 以随机顺序重新排列NSArray/MSMutableArray

请注意,此代码不是最佳的,因为它不在后台线程上执行获取任务.要使用后台线程,您可以使用以下内容 -

PFQuery *query =[PFQuery queryWithClassName:@"Todo"];


[query countObjectsInBackgroundWithBlock:^(int number, NSError *error) {

    query.skip=arc4random_uniform(number-10);;
    query.limit=10;

    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
        if (error) {
        NSLog(@"An error occurred - %@",error.localizedDescription);
        }
        else {
            NSLog(@"object count=%d",objects.count);

            for (PFObject *object in objects) {
                NSLog(@"text=%@",object[@"text"]);
            }
        }
    }];


}];
Run Code Online (Sandbox Code Playgroud)