2014-02-19 51 views
0

在我的應用我有很長appWillEnterForeground:appDidEnterBackground之前被稱爲:完成

- (void)appDidEnterBackground:(NSNotification*)notif方法,

它需要1-2秒來執行。這導致了以下問題:如果我關閉應用程序,然後再次打開速度非常快,比

- (void)appWillEnterForeground:(NSNotification*)notif

-appDidEnterBackground完成之前被調用,從而導致崩潰 - 數據並不一致,或者是這樣的。我不想調查我的數據中究竟出了什麼問題,我想阻止這種情況的發生 - 我想等到appDidEnterBackground完成。

我的代碼:

- (void)appDidEnterBackground:(NSNotification*)notif 
{ 
    [self processAppDidEnterBackgroundRoutines]; 

    NSLog(@"%s - end", __FUNCTION__); 
} 

- (void)processAppDidEnterBackgroundRoutines 
{ 
    // 1-2 seconds prosessing 
} 

- (void)appWillEnterForeground:(NSNotification*)notif 
{ 
    NSLog(@"%s - begin", __FUNCTION__); 
} 

席力圖召

[self performSelectorOnMainThread:@selector(processAppDidEnterBackgroundRoutines) withObject:nil waitUntilDone:YES];

,但它並不能幫助出於某種原因 - appWillEnterForeground:processAppDidEnterBackgroundRoutines完成之前仍然被調用。

有沒有人有別人的想法如何同步此調用?

回答

2

它會爲你工作,把兩個串行隊列?

- (void)appDidEnterBackground:(NSNotification*)notif 
{ 
    dispatch_sync(serialQueue, ^() 
    { 
     [self processAppDidEnterBackgroundRoutines]; 
    }); 
} 

- (void)processAppDidEnterBackgroundRoutines 
{ 
    // 1-2 seconds prosessing 
} 

- (void)appWillEnterForeground:(NSNotification*)notif 
{ 
    dispatch_sync(serialQueue, ^() 
    { 
     // do your stuff 
    }); 
} 
0

您的問題似乎是因爲您在appDidEnterBackground:方法中使用了performSelectorOnMainThread:。這會導致該選擇器稍後運行,因爲您已經在主線程上運行了。只需停止做performSelectorOnMainThread:,因爲它是不必要的,是什麼導致你的問題。

+0

哦,沒錯,使用performSelectorOnMainThread:沒有意義。但只需調用-processAppDidEnterBackgroundRoutines - 這是我的問題發生的原始情況。 performSelectorOnMainThread:只是一個嘗試解決它。編輯我的問題。 – Anastasia

相關問題