我想让我PFQuery
随机出现,所以下一次我创建PFQuery
带有限制的对象时,它不会返回与第一个对象相同的对象。
PFQuery *query = [PFUser query];
[query orderBy...]; //Is there a randomOrder method?
//Or a workaround to get random order?
[query setLimit:10];
我需要每次都以随机顺序排列,否则PFQuery
每次将包含相同的10个对象
您无法更改查询中返回的数据的顺序,但是可以使用分页来更改返回的第一个对象-因此您可以执行类似的操作(它基于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"]);
}
现在,您可以检索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"]);
}
}
}];
}];
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句