ユーザーがホームボタンを押したときにコアデータを保存しようとしています。からやりたかったのです-applicationDidEnterBackground:
が、呼ばれていません。これは、ここからCore Dataを保存できないか、操作を完了するのに十分な時間がないためである可能性があります。ただし-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]"];
}