2013-03-21 84 views
4

我想在用戶按Home鍵時保存核心數據。我想從-applicationDidEnterBackground:這樣做,但它沒有被調用。這可能是因爲你無法從這裏保存核心數據,或者只是因爲沒有足夠的時間來完成操作。但它的工作從-applicationWillResignActive:我只是好奇,這是最好的代表方法來做到這一點,爲什麼-applicationDidEnterBackground:不起作用。 (正如你可以從輸出這兩種方法都被調用,如果我刪除看到-applicationWillResignActive:沒有保存發生在所有的,所以它不是當一個人擋住了其他的情況)當用戶退出應用程序時保存核心數據?

// CALLS SAVE 
- (void)applicationWillResignActive:(UIApplication *)application { 
    [[self model] saveCoreData:@"SAVE FROM: applicationWillResignActive"]; 
    NSLog(@"APPDEL: %s", __PRETTY_FUNCTION__); 
} 

// DOES NOT CALL SAVE 
- (void)applicationDidEnterBackground:(UIApplication *)application { 
    [[self model] saveCoreData:@"SAVE FROM: applicationDidEnterBackground"]; 
    NSLog(@"APPDEL: %s", __PRETTY_FUNCTION__); 
} 

// CONSOLE OUTPUT 
2013-03-21 cvb[6724:907] APPDEL: -[AppDelegate applicationWillResignActive:] 
2013-03-21 cvb[6724:907] APPDEL: -[AppDelegate applicationDidEnterBackground:] 
2013-03-21 cvb[6724:907] 
2013-03-21 cvb[6724:907] SAVE: SAVE FROM: applicationWillResignActive 
2013-03-21 cvb[6724:907] SAVE: Saving successful ... 

編輯:

這是我最後還是沒買:

- (void)applicationDidEnterBackground:(UIApplication *)application { 
    __block UIBackgroundTaskIdentifier bgTask = [application beginBackgroundTaskWithExpirationHandler:^{ 
     [application endBackgroundTask:bgTask]; 
     bgTask = UIBackgroundTaskInvalid; 
    }]; 
    [[self model] saveCoreData:@"[ENTERING BACKGROUND]"]; 
} 
+0

乾杯郭,你也打我吧。 – fuzzygoat 2013-03-21 12:48:32

+0

applicationDidEnterBackground中模型的值是什麼?我認爲這不是零? – occulus 2013-03-21 13:05:42

+0

您的saveCoreData方法是否異步工作?還是它阻塞,直到完成保存?儲蓄需要多長時間? – occulus 2013-03-21 13:06:31

回答

2

退房的UIApplicationDelegate protocol reference

基本上,這是您可能感興趣的部分約applicationDidEnterBackground:

您應該執行與此方法退出,但其他任務(如保存狀態)之前,調整你的用戶界面 任何任務應該 是根據需要移動到併發調度隊列或輔助線程。 因爲它可能是您在 開始的任何後臺任務applicationDidEnterBackground:將不會運行,直到方法 退出後,您應該在 開始這些任務之前請求額外的後臺執行時間。換句話說,首先調用 beginBackgroundTaskWithExpirationHandler:然後在 調度隊列或輔助線程上運行任務。

+1

非常感謝。 – fuzzygoat 2013-03-21 16:59:36

相關問題