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个对象
您无法更改查询中返回的数据的顺序,但您可以使用分页来更改返回的第一个对象 - 因此您可以执行类似的操作(它基于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)