5

バックグラウンド スレッドでタスクを完了している iOS アプリがあります。各タスクが完了すると、メイン スレッドにメッセージを送信して、カスタム プログレス バーに沿って適切なステージに移動できるようにします。

これを達成するための最も簡単で安全な方法は何ですか?

編集1

これは私が使用している方法です:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 
                                         (unsigned long)NULL), ^(void) {

     // get background tasks done. 
     [self.background backgroundMethod];

});

編集2

@Madboyの回答を使用して試行する例を次に示します。バックグラウンドでメソッドを実行するクラス内に、進行状況バーへのポインターがあります。これはうまくいくと思いますか?(EDIT 1 にも変更があることに注意してください)。

@implementation BackgroundClass
@synthesize delegate;
@synthesize customProgressBar

- (void)backgroundMethod
{
    // Run tasks
}

- (void)delegateSaysBackgroundMethodIsFinished
{
    [self performSelectorOnMainThread:@selector(tasksDone:) withObject:self.customProgressBar waitUntilDone:NO];

}

@implementation CustomProgressBar

- (void)tasksDone
{
    // change UI to reflect progress done. 
}
4

3 に答える 3

10

これは、あなたがしていることに基づいています。GCD を使用してバックグラウンドでタスクを実行していますか? 次に、単に呼び出すことができます:

dispatch_async(dispatch_get_main_queue(), ^{
    //your main thread task here
});

NSThread で実行している場合は、次のようにすることができます。

[myObject performSelectorOnMainThread:YOURSELECTOR withObject:YOUROBJECT waitUntilDone:NO];
于 2012-10-17T11:41:42.513 に答える
4

NSObjectperformSelectorOnMainThread:withObject:waitUntilDone:のメソッドを使用できます。

waitUntilDone パラメータはブール値です。YES を渡すと、メイン スレッドのメソッドが完了するまでバックグラウンド スレッドを待機させることができます。NO を渡してそのメソッドを起動し、メイン スレッドと同時にバックグラウンド スレッドで実行を続けることができます。

于 2012-10-17T11:41:18.843 に答える
0

NSNotificationCenterスレッド間のメッセージングを許可します。「リスナー」を設定すると、通知をブロードキャストできます。Apple のドキュメントは非常に優れており、簡単に理解できます。

于 2012-10-17T11:40:40.233 に答える