假设我构建的iPhone应用程序在其中一个屏幕中接受用户名和密码。当我输入用户名时,我会像电话一样获得高优先级的事件。 此时我的应用程序将从活动状态转换为非活动状态。
我的问题是:我需要在我的应用程序中执行哪些步骤才能保存当前的应用程序状态(以及输入的信息),以便我可以在以后的应用程序变为活动状态时恢复相同的状态?
在iOS采访中提出了这个问题。
我的回答是在applicationWillResignActive委托方法中处理活动到非活动状态转换,以保存部分输入的用户信息详细信息并在applicationDidBecomeActive方法中恢复它。 App UI状态,我们无需处理,因为操作系统会处理它。
看起来面试官不相信我的答案。他一直问我你将如何处理(你将在你的应用程序中采取的步骤)从活动状态转换到非活动状态然后再转换到应用程序中的活动状态,以便应用程序状态恢复/完整?
答案 0 :(得分:1)
您的回答是正确的,面试官可能正在寻找您为这些方法命名的方法,而您很可能只将您所说的两种方法命名为。某些应用UI状态还有一些其他委托方法,例如applicationDidEnterBackground
和applicationWillEnterForeground
如果您在评论中阅读了这些方法的默认描述,您将更好地了解每种方法的用途。例如,applicationWillResignActive
专门指来电或短信:
//当应用程序即将从活动状态转为非活动状态时发送。对于某些类型的临时中断(例如来电或SMS消息),或者当用户退出应用程序并开始转换到后台状态时,可能会发生这种情况。
//使用此方法暂停正在进行的任务,禁用计时器,并降低OpenGL ES帧速率。游戏应使用此方法暂停游戏。
applicationDidEnterBackground
用于在用户关闭您的应用时保存用户数据:
//使用此方法释放共享资源,保存用户数据,使计时器无效,并存储足够的应用程序状态信息,以便将应用程序恢复到当前状态,以防以后终止。
//如果您的应用程序支持后台执行,则在用户退出时调用此方法而不是applicationWillTerminate:
查看一个新项目的AppDelegate.m文件,这些注释对于准确理解哪些状态将处理哪些状态以及何时应该使用每个状态非常非常有用。
另外,请务必阅读有关处理申请状态的Apple文档:The App Life Cycle
答案 1 :(得分:0)
答案 2 :(得分:0)
我认为你正在谈论更多关于restore state
的问题
首先,实现App委托协议:
func application(application: UIApplication, shouldRestoreApplicationState coder: NSCoder) -> Bool {
return true
}
func application(application: UIApplication, shouldSaveApplicationState coder: NSCoder) -> Bool {
return true
}
然后在ViewController中,实现UIStateRestoring
协议。在这里你应该注意到,如果你想归档你自己的复杂对象,不要忘记实现NSCoder
请深入“恢复状态”。
此外,当你的应用程序转到后台时,你需要做一些工作,如停止计时器,暂停正在进行的任务 当前往前台时,您需要执行诸如启动暂停任务之类的操作,并准备刷新页面。