0

secondView から mainView に戻ると、secondView の viewDidDisappear メソッドで何かを処理しています。問題は、アプリがしなければならない作業が原因で、mainView が動かなくなることです。

これが私がすることです:

-(void)viewDidDisappear:(BOOL)animated
{
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);

    dispatch_async(queue, ^{

    dbq = [[dbqueries alloc] init];

    [[NSNotificationCenter defaultCenter] postNotificationName:@"abc" object:nil];
    //the notification should start a progressView, but because the whole view gets stuck, I can't see it working, because it stops as soon as the work is done

    dispatch_sync(dispatch_get_main_queue(), ^{

    //work    

    });
});

私は何を間違っていますか?前もって感謝します!

4

1 に答える 1

3

で作業を行う必要がありdispatch_asyncますqueue// Work現在、メイン スレッドで作業を行っており (コメントがその場所にあると仮定)、さらに、この作業を待機しているワーカー スレッドをブロックしています。

GCD 呼び出しを少し並べ替えてみてください。

-(void)viewDidDisappear:(BOOL)animated
{
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);

    dbq = [[dbqueries alloc] init];

    [[NSNotificationCenter defaultCenter] postNotificationName:@"abc" object:nil];

    dispatch_async(queue, ^{

        // Perform work here

        dispatch_async(dispatch_get_main_queue(), ^{

           // Update UI here

        });
    });
}
于 2012-07-18T12:42:29.263 に答える