0

このコードを取得しました:

[self setQRCodeScannerMode:false];
[self.activityIndicator startAnimating];
TBXMLSuccessBlock successBlock = ^(TBXML *tbxmlDocument) {
    if ([[TBXML elementName:tbxmlDocument.rootXMLElement] isEqualToString:@"xxxxxx"]){
        [self setQRCodeScannerMode:true];
    } else {
        [self setQRCodeScannerMode:true];
    }
};

問題は、メソッド [setQRCodeScannerMode] 内でスキャン モードを true に設定すると、アクティビティ インジケーターが停止することです。でもびっくり!!!アクティビティインジケーターはまだ機能しており、数秒後に私のビューをいじっています。

私に何ができる?

4

4 に答える 4

2

完了ブロックでアクティビティ インジケーターを停止する必要があります。

[self setQRCodeScannerMode:false];
[self.activityIndicator startAnimating];
TBXMLSuccessBlock successBlock = ^(TBXML *tbxmlDocument) {
    if ([[TBXML elementName:tbxmlDocument.rootXMLElement] isEqualToString:@"xxxxxx"]){
        [self setQRCodeScannerMode:true];
    } else {
        [self setQRCodeScannerMode:true];
    }

    [self.activityIndicator stopAnimating];
};

これは、完了ブロックがメインスレッドで呼び出されることを前提としています。メインスレッドで完了ブロックが呼び出されるという保証がない場合は、次のようにすることができます。

[self setQRCodeScannerMode:false];
[self.activityIndicator startAnimating];
TBXMLSuccessBlock successBlock = ^(TBXML *tbxmlDocument) {
    if ([[TBXML elementName:tbxmlDocument.rootXMLElement] isEqualToString:@"xxxxxx"]){
        [self setQRCodeScannerMode:true];
    } else {
        [self setQRCodeScannerMode:true];
    }

    if ([NSThread isMainThread]) {
        [self.activityIndicator stopAnimating];
    } else {
        dispatch_async(dispatch_get_main_queue(), ^{
            [self.activityIndicator stopAnimating];
        });
    }
};
于 2012-11-06T04:22:33.870 に答える
1

[self.activityIndi​​cator stopAnimating]; を呼び出すことになっています。あなたがそれを終えた後、それがうまくいかない場合は、これを試してください!

[self.activityIndicator performSelector:@selector(stopAnimating) withObject:nil afterDelay:0.1];

それが役立つことを願っています!

于 2012-11-06T04:11:29.397 に答える
0

できることの 1 つは、メイン スレッドではなく、別のスレッドでインジケーターを操作することです。NSOperationQueue と NSInvocationOperation を使用できます

于 2012-11-06T04:07:32.103 に答える
0

ブロックの後にこのコードを追加するだけです

 [self.activityIndicator stopAnimating];
于 2012-11-06T04:22:14.510 に答える