当用户按下主页按钮时,我正在尝试保存核心数据。我想这样做,-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]"];
}