2013-03-21 93 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

相关问题