如何实现下面的这些东西?请给我一些指导。我在下面描述了我的问题。
当我点击主页按钮并从托盘中删除应用程序时,当我打开应用程序时,我会看到登录屏幕。我知道如何很好地使用 NSUserDefaults
。
但我的问题是,当我导航到第 3 个或第 4 个 viewController
并按下主页按钮并从托盘中删除应用程序时,每当我打开应用程序时,我想用上次打开的 viewController 打开
。
同样,当我的应用程序崩溃并且我再次打开它时,我想以上次打开的 viewController
状态打开应用程序。
所以我只想知道这是否可能?如果是,请指导我如何实现这些东西。
谢谢
最佳答案
是,这两种情况都是可能的。
崩溃时,您可以使用 UncaughtExceptionHandler 来执行一些代码。在您的应用委托(delegate)中,像这样注册您的处理程序:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);
// Other didFinishLaunchingWithOptions code
并将您的处理程序方法添加到同一个 .m 文件
void uncaughtExceptionHandler(NSException *exception)
{
// App crashed, save last selected tabbar index to the to the NSUserDefaults
[[NSUserDefaults standardUserDefaults] setInteger:tabBarController.selectedIndex forKey:@"LastSelectedTabbarIndex"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
在应用程序运行时,要跟踪最后选择的标签栏 Controller ,请使用 UITabBarControllerDelegate
并将新选择的标签栏的索引保存到 NSUserDefaults
。简短示例:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
NSUInteger tabIndex = [[tabBarController viewControllers] indexOfObject:viewController];
// I have newly selected index, now save it to the NSUserDefaults
}
每次 tabbar 的选定索引更改时,此代码会将最后选定的 tabbar 的索引保存到 NSUserDefaults
。
最后,当您的应用程序启动时(在您的 didFinishLaunchingWithOptions
中),从 NSUserDefaults
中读取最后保存的标签栏索引并相应地设置标签栏的选定索引
self.tabBarController.selectedIndex = lastSelectedIndexFromDefaults;
编辑:
如果您还需要恢复 UINavigationController
的 Controller 堆栈,这是一项非常困难的任务。我只是简要概述一下我的想法。
有2种情况:
- 您有自定义 View Controller 初始化程序,需要将自定义对象传递给那些 Controller - 在这种情况下,它几乎不可能(在一些合理的时间内)实现它
- 您仅使用
-init
或-initWithNibName...
: 在导航堆栈中初始化 View Controller 。您可以从选项卡的根UINavigationController
枚举 Controller ,使用NSStringFromClass
获取它们的类名并将它们保存到NSUserDefaults
。在应用程序启动时,您将反转过程(使用从NSUserDefaults
中读取的名称字符串初始化 Controller ,使用如下内容:UIViewController *vc = [[NSClassFromString(@"aa") alloc] init] ;
).
关于iphone - iOS : is it possible to open previous viewController after crashing and re-launch app?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17066537/