-2

IBAction を停止する方法がわかりません。必要なもの: ボタンを押してから、約 5 分間実行される IBAction を呼び出します。キャンセルボタンを押すと、最初のボタンから IBAction が停止するようにしたいと思います。

どうすればいいですか?

コード:

- (IBAction)download:(id)sender {


    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^ {

        // Determile cache file path
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);


        for (i=0;i<=7;i++) {

            //Updating progressView and progressLabel

            dispatch_async(dispatch_get_main_queue(), ^ {
                progressSlider.progress = (float)i/(float)299;
                progressLabel.text = [NSString stringWithFormat:@"Загружено: %d из 299",i];
            });

            NSString *filePath = [NSString stringWithFormat:@"%@/avto-0-%d.html", [paths objectAtIndex:0],i];

            // Download and write to file
            NSString *mustUrl = [NSString stringWithFormat:@"http://www.mosgortrans.org/pass3/shedule.php?type=avto&%@", [listOfAvtoUrl objectAtIndex:i]];
            NSURL *url = [NSURL URLWithString:mustUrl];
            NSData *urlData = [NSData dataWithContentsOfURL:url];


            [urlData writeToFile:filePath atomically:YES];

        }

    });


}
4

2 に答える 2

1

IBActionクリックすると別のスレッドでコードを実行する別の関数を呼び出します。必要に応じて、スレッドを停止/キャンセルできるようになりました。

于 2012-11-22T14:00:14.997 に答える
0

isCancelled という BOOL 変数を作成します。別のボタンをクリックすると isCancelled が YES に設定されます。ダウンロード関数で、これを for ループ内に設定します。

if (isCancelled)return;
于 2012-11-22T14:06:51.090 に答える