-2

PFQuery の専門家は誰ですか? 問題が発生しました。

クエリは、Xcode ファイルのように、私が書いたコードの順序に従っていません。順序は、クエリ 1、クエリ 2、クエリ 3、クエリ 4 です。ただし、コードが実行されると、クエリ スタッフの内容は 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:は「これをかけて料理して、出来上がったらこれで(ブロックの部分)」と言うようなものです。

クエリが終了すると、ブロック内のコードが後で実行されます。順序は毎回同じになるわけではなく、ネットワークの問題により、1 つまたは複数の順序が実際に失敗する可能性があります。

于 2014-08-05T06:13:18.260 に答える