首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置PFQuery命令

设置PFQuery命令
EN

Stack Overflow用户
提问于 2014-08-14 22:59:33
回答 3查看 590关注 0票数 3

我想让我的PFQuery以随机顺序出现,所以下次我创建相同的PFQuery时,它不会像第一个对象一样返回相同的对象。

代码语言:javascript
复制
PFQuery *query = [PFUser query];
[query orderBy...]; //Is there a randomOrder method?
                    //Or a workaround to get random order?
[query setLimit:10];

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-14 23:48:51

您不能更改查询中返回的数据的顺序,但您可以使用分页来更改返回的第一个对象--因此您可以这样做(它基于来自Parse的ToDo示例代码,但对任何对象都有效)-

代码语言:javascript
复制
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"]);
}

现在您可以检索您的10个对象。对于任何给定的跳过计数,它们都将是相同的顺序,但您可以在检索这10项之后随机选择顺序。简单地将它们放入一个NSMutableArray中,并在这个答案- Re-arrange NSArray/MSMutableArray in random order中使用技术

注意,这段代码不是最优的,因为它没有在后台线程上执行提取任务。若要使用后台线程,请使用以下内容-

代码语言:javascript
复制
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"]);
            }
        }
    }];


}];
票数 5
EN

Stack Overflow用户

发布于 2014-08-20 09:15:49

PFQuery不支持随机顺序,但可以通过为每个对象创建一个递增的索引字段来解决这一问题。

然后,如果您知道表中的maxIndex,就可以生成随机索引如下:

代码语言:javascript
复制
- (NSArray *)generateRandomIndices:(int)maxIndex limit:(int)limit {
    NSMutableArray  *indices = [[NSMutableArray alloc] initWithCapacity:limit];
    for (int i=0; i<limit; i++) {
        int randomIndex  = arc4random() % maxIndex;
        [indices addObject:[NSNumber numberWithInt:randomIndex]];
    }
    return indices;
}

现在您可以使用IN谓词查询类了。

代码语言:javascript
复制
NSArray *randomIndices = [self generateRandomIndices:maxIndex limit:10];
NSPredicate *predicate = [NSPredicate predicateWithFormat:
                          @"index IN %@", randomIndices];
PFQuery *query = [PFQuery queryWithClassName:@"className" predicate:predicate];
票数 0
EN

Stack Overflow用户

发布于 2014-08-23 10:44:19

PFQuery不给随机对象。您可以获得所有对象,然后随机化,从其中获取任意10个对象并显示出来。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25318895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档