当用户退出应用程序时保存核心数据?
我想在用户按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]"];
}
退房的UIApplicationDelegate protocol reference。
基本上,这是您可能感兴趣的部分约applicationDidEnterBackground:
您应该执行与此方法退出,但其他任务(如保存状态)之前,调整你的用户界面 任何任务应该 是根据需要移动到并发调度队列或辅助线程。 因为它可能是您在 开始的任何后台任务applicationDidEnterBackground:将不会运行,直到方法 退出后,您应该在 开始这些任务之前请求额外的后台执行时间。换句话说,首先调用 beginBackgroundTaskWithExpirationHandler:然后在 调度队列或辅助线程上运行任务。
非常感谢。 – fuzzygoat 2013-03-21 16:59:36
干杯郭,你也打我吧。 – fuzzygoat 2013-03-21 12:48:32
applicationDidEnterBackground中模型的值是什么?我认为这不是零? – occulus 2013-03-21 13:05:42
您的saveCoreData方法是否异步工作?还是它阻塞,直到完成保存?储蓄需要多长时间? – occulus 2013-03-21 13:06:31