-2

有谁是 PFQuery 的专业人士?我有问题。

查询不遵循我编写的代码顺序,就像在我的 Xcode 文件中一样,顺序是 query1、query2、query3 和 query4。但是,在执行代码时,查询内容的内容出现时没有遵循 1,2,3,4 的顺序。这真的给我带来了麻烦。请帮忙。这是我的代码:

-(void)viewWillAppear:(BOOL)animated{

 SAC_rateSum=0;
 SAC_rateNumbers=0;

NSMutableArray *SAC_CG_rateNumber = [NSMutableArray array];

PFQuery * SAC_CG_rateAQuery = [PFQuery queryWithClassName:@"SAC_CG_Rate"];

[SAC_CG_rateAQuery selectKeys:@[@"rate"]];
[SAC_CG_rateAQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    for (PFObject *object in objects) {

        [SAC_CG_rateNumber addObject:[object objectForKey:@"rate"]];
    }

    for (NSNumber *n in SAC_CG_rateNumber) {

        SAC_rateSum +=[n doubleValue];

    }

    SAC_rateNumbers+=SAC_CG_rateNumber.count;
    NSLog(@"CG:%.0f",SAC_rateNumbers);

    }];

NSMutableArray *SAC_MP_rateNumber = [NSMutableArray array];

PFQuery * SAC_MP_rateAQuery = [PFQuery queryWithClassName:@"SAC_MP_Rate"];

[SAC_MP_rateAQuery selectKeys:@[@"rate"]];
[SAC_MP_rateAQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    for (PFObject *object in objects) {

        [SAC_MP_rateNumber addObject:[object objectForKey:@"rate"]];

    }
    for (NSNumber *n in SAC_MP_rateNumber) {

        SAC_rateSum +=[n doubleValue];
    }

   SAC_rateNumbers+=SAC_MP_rateNumber.count;
    NSLog(@"MP:%.0f",SAC_rateNumbers);
}];





NSMutableArray *SAC_NS_rateNumber = [NSMutableArray array];

PFQuery * SAC_NS_rateAQuery = [PFQuery queryWithClassName:@"SAC_NS_Rate"];

[SAC_NS_rateAQuery selectKeys:@[@"rate"]];
[SAC_NS_rateAQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    for (PFObject *object in objects) {

        [SAC_NS_rateNumber addObject:[object objectForKey:@"rate"]];

        }

    for (NSNumber *n in SAC_NS_rateNumber) {

        SAC_rateSum +=[n doubleValue];
    }

   SAC_rateNumbers += SAC_NS_rateNumber.count;

    NSLog(@"NS:%.0f",SAC_rateNumbers);


}];
NSMutableArray *SAC_SB_rateNumber = [NSMutableArray array];

PFQuery * SAC_SB_rateAQuery = [PFQuery queryWithClassName:@"SAC_SB_Rate"];

[SAC_SB_rateAQuery selectKeys:@[@"rate"]];
[SAC_SB_rateAQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    for (PFObject *object in objects) {

        [SAC_SB_rateNumber addObject:[object objectForKey:@"rate"]];

    }
    for (NSNumber *n in SAC_SB_rateNumber) {

        SAC_rateSum +=[n doubleValue];
    }

    SAC_rateNumbers+=SAC_SB_rateNumber.count;
    NSLog(@"SB:%.0f",SAC_rateNumbers);
}];


NSMutableArray *SAC_WiU_rateNumber = [NSMutableArray array];

PFQuery * SAC_WiU_rateAQuery = [PFQuery queryWithClassName:@"SAC_WiU_Rate"];

[SAC_WiU_rateAQuery selectKeys:@[@"rate"]];
[SAC_WiU_rateAQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    for (PFObject *object in objects) {

        [SAC_WiU_rateNumber addObject:[object objectForKey:@"rate"]];
    }

    for (NSNumber *n in SAC_WiU_rateNumber) {

        SAC_rateSum+=[n doubleValue];
    }

   SAC_rateNumbers+=SAC_WiU_rateNumber.count;
    NSLog(@"WIU:%.0f",SAC_rateNumbers);
}];


        NSMutableArray *SAC_WS_rateNumber = [NSMutableArray array];

PFQuery * SAC_WS_rateAQuery = [PFQuery queryWithClassName:@"SAC_WS_Rate"];

[SAC_WS_rateAQuery selectKeys:@[@"rate"]];
[SAC_WS_rateAQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    for (PFObject *object in objects) {

        [SAC_WS_rateNumber addObject:[object objectForKey:@"rate"]];
              }

    for (NSNumber *n in SAC_WS_rateNumber) {

       SAC_rateSum +=[n doubleValue];
    }


    SAC_rateNumbers+=SAC_WS_rateNumber.count;
    NSLog(@"WS:%.0f",SAC_rateNumbers);
    self.dininghallAscoreLabel.text=[NSString stringWithFormat:@"         %.1f", SAC_rateSum/SAC_rateNumbers];
    self.dininghallAratesLabel.text=[NSString stringWithFormat:@"%.0f rates",SAC_rateNumbers];
    NSLog(@"%.1f",SAC_rateSum);
    NSLog(@"TOTAL: %.0f",SAC_rateNumbers);

}];





   }

非常感谢!

4

1 回答 1

0

也许最好用一个例子来回答你的问题:

如果我准备了4道菜:鸡蛋、牛排、炒菜和米饭

然后我把它们一个接一个放在炉子上,为什么不按顺序煮完呢?

当然从例子中很容易看出,每道菜都需要一段时间来烹饪,而且不同的东西不会同时完成......异步代码也是如此!

你打电话时findObjectsInBackgroundWithBlock:它时,就像在说“把它放在做饭上,然后用结果(块部分)做这个”。

当您的查询完成时,块中的代码稍后运行。顺序不会每次都相同,其中一个或多个实际上可能由于网络问题而失败。

于 2014-08-05T06:13:18.260 回答