Ios 当从后台唤醒时,应用程序将重新启动

Ios 当从后台唤醒时,应用程序将重新启动,ios,background-process,Ios,Background Process,G'day iOS Guru's 我已经广泛地搜索了一个答案,但找不到(我打赌我的问题的第一个答案将是另一个类似的问题,但我找不到) 无论如何,我的问题是,我正在运行一个简单的地图应用程序,用户可以在地图上放置图钉,并在放置的图钉周围覆盖一个自定义的圆圈 当应用程序进入后台(iphone锁定或按下home按钮)时,如果我在~5分钟内重新进入应用程序,PIN码仍在,应用程序将重新打开到最后一个屏幕 一切都好 但是,如果我将应用程序留在后台超过5分钟,应用程序将重新启动,所有PIN码都将丢失 我在p

G'day iOS Guru's

我已经广泛地搜索了一个答案,但找不到(我打赌我的问题的第一个答案将是另一个类似的问题,但我找不到)

无论如何,我的问题是,我正在运行一个简单的地图应用程序,用户可以在地图上放置图钉,并在放置的图钉周围覆盖一个自定义的圆圈

当应用程序进入后台(iphone锁定或按下home按钮)时,如果我在~5分钟内重新进入应用程序,PIN码仍在,应用程序将重新打开到最后一个屏幕

一切都好

但是,如果我将应用程序留在后台超过5分钟,应用程序将重新启动,所有PIN码都将丢失

我在plist中有“Application not run in background=NO”,并在所需的后台模式下启用了“App registers for location updates”


如何防止应用程序在进入后台并加载上次打开的视图后重新启动?

在AppDelegate.m中

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 
    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
    // Save your data
}

如果你的应用程序需要额外的资源来执行前台发生的任何事情,iOS可以也将在后台终止你的应用程序

您需要确保在应用程序终止时保存/归档您的数据,并在重新启动时解压缩数据,以便返回到用户上次所在的位置。执行此操作的传统方法是使用
ApplicationIdentinterBackground
方法,当应用程序挂起时调用此方法。然后,您可以保存所需的所有数据,以便在应用程序稍后终止时干净地恢复


然而,如果你的目标是iOS 6及以上版本,你可以利用一项新功能-。状态恢复将一些(但不是全部)繁重的工作卸载到iOS上,它可以自动快照您的UI,并提供更简单的方法来保存和恢复数据。

感谢lxt,它不知道状态推定和恢复,听起来这正是我想要的,这个链接非常有帮助,可以尝试一下。我在代码中加入了状态保留,当我重新打开它时,我的注释和覆盖被恢复,耶。但是地图没有加载,doh(基本上我的注释和覆盖在一个普通的背景上是可见的,没有地图图像)。我忘了什么?我已选择加入应用程序委托,并实现了在视图控制器中编码/解码注释和覆盖所需的方法。我错过了什么?哦,忘了提到我正在使用故事板,并且已经设置了恢复id。你是如何创建地图的?只是将其添加到故事板中?这是否适用于非故事板应用程序?您可以使用相同的技术,但需要提供恢复方法,以便根据需要从xib文件重新创建视图。感谢Liolik,我之前已经研究过了,但不确定这是否会影响应用程序从头开始重新启动。我将在下面给出lxt建议的州推定和恢复,听起来像是我想要的。干杯