0

現在呼び出されているすべてのメソッドを終了してから、現在のオブジェクトを再初期化します。したがって、ユーザーが[スタート]ボタンをクリックすると、一連のメソッドが呼び出されます...作業を開始します。次に、ユーザーが[キャンセル]をクリックすると、実行中のすべてのタスク/メソッドを停止して再初期化する必要があります。

アプリ自体を終了させたくありません。したがって、[NSAppterminate:nil]は使用できません。現在のすべての関数を停止する必要があるだけで、[selfinit]を呼び出すことができます。前もって感謝します。

4

1 に答える 1

2

まず、何らかのフラグを設定し、すべてのメソッドが完了するまでユーザー インターフェイスを無効にする必要があります。たとえば、self.cancelled = YES.

次に、そのフラグが設定されている場合に返すように、各メソッドを調整する必要があります。

- (void)doSomething
{
    if (self.cancelled) return;
    // ...
    for (/* ... */) {
        // ...
        if (self.cancelled) return;
        // ...
    }
    // etc...

}

次に、すべてのメソッドを追跡するメカニズムが必要です。ほとんどの場合、NSOperationQueueまたはを使用しますdispatch_queue_t。キューが空になったときに通知を受け取る方法については、ドキュメントを参照してください。

最後に、self.cancelledフラグをリセットして、ユーザー インターフェイスのブロックを解除します。

于 2012-06-02T22:17:29.367 に答える