如何在密码表单后显示最后一个带有数据的视图控制器?

Posted

技术标签:

【中文标题】如何在密码表单后显示最后一个带有数据的视图控制器?【英文标题】:How to show last view controller with data in it after password form? 【发布时间】:2014-03-10 13:58:18 【问题描述】:

我有两个故事板。 First 用于显示密码。它有两个视图控制器和自己的导航控制器。第二个故事板包含应用程序的视图控制器和导航控制器。如果用户不会在设置中禁用它,则用户每次启动应用程序时都应输入密码。

这是我的 AppDelegate.m:

- (void)startApp

    // Override point for customization after application launch.
    if ([Security getUseOrNotPassword] || (NO == [Settings isNotFirstAppRun]) )
        [self showLoginScreen];
    else
        [self showMainVC];



-(void)showLoginScreen

    if (NO == [Settings isNotFirstAppRun])
        [Settings setDefaultLanguage];
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Password" bundle:nil];
    PasswordVC *passwordView = [storyboard instantiateViewControllerWithIdentifier:@"Login"];
    if (NO == [Settings isNotFirstAppRun] ) 
    
        passwordView = [passwordView initForAction:PasscodeActionSet];
        [Security saveUseOrNotPassword:YES]; 

    
    else 
    
        passwordView = [passwordView initForAction:PasscodeActionEnter];
        passwordView.passcode = [Security getPassword]; //pass password to verify  
    
    passwordView.delegate = self;
    UINavigationController *navigationController= [[UINavigationController alloc] initWithRootViewController:passwordView];

    [[(AppDelegate*)[[UIApplication sharedApplication] delegate] window] setRootViewController:navigationController];
    [self.window makeKeyAndVisible];


-(void)showMainVC

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    MainTableVC *mainVC = [storyboard instantiateViewControllerWithIdentifier:@"main"];
    LeftMenuVC *menuVC = [storyboard instantiateViewControllerWithIdentifier:@"leftMenu"];
    RevealVC *mainRevealController = [[RevealVC alloc] initWithRearViewController:menuVC frontViewController:mainVC];

    UINavigationController *navigationController= [[UINavigationController alloc] initWithRootViewController:mainRevealController];

    [[(AppDelegate*)[[UIApplication sharedApplication] delegate] window] setRootViewController:navigationController];

这是来自密码的委托方法:如果用户输入“正确”密码,主屏幕正在打开:

- (void)PasswordVCDidEnterPasscode:(PasswordVC *)controller

    [self.window.rootViewController dismissViewControllerAnimated:YES completion:nil];
    [self performSelector:@selector(showMainVC) withObject:nil afterDelay:0.1];

最后:每次应用激活时显示密码

- (void)applicationDidBecomeActive:(UIApplication *)application

    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
    [self startApp];

我的问题是: 在这个用于显示密码表单的架构中如何显示用户的最后一个视图控制器,他在其中输入了一些内容和数据(文本字段中的文本等)?因为如果用户按下 Home 按钮并在启动到应用程序后全部数据将消失,将出现应用程序的主屏幕=) 也许我应该更改显示密码表单的算法? 感谢您的回答和建议!祝你编码愉快!)

【问题讨论】:

【参考方案1】:

密码形式与此无关,一旦应用程序被杀死(这将在某个时候,如果它在后台),内存中的数据就会丢失。

首先,您必须想办法存储(持久化)应用程序的状态。您可以使用 NSUserDefaults 执行此操作以获得非常基本的持久性,例如:用户上次访问的屏幕、上次访问时间或类似信息。

但是对于存储用户输入的数据的更高级的持久性,您必须编写自己的数据模型。有很多方法可以做到这一点,所以我只能给你一些起点:

如果您有关系结构化数据,请使用Core Data。 对于非常基本的存储,您还可以使用属性列表文件。 对于同步,您可以使用 Dropbox 或 iCloud API。

首先,您需要确定您需要什么以及您将如何解决这个问题。您需要编写一些代码才能使这一切正常运行。

【讨论】:

不,不,你没有完全理解我:) 我想在启动应用程序后恢复我的视图控制器和其中的数据(文本等):) 但通过我的模式我应该总是去到主 vc :) 但我需要显示最后一个视图控制器:)

以上是关于如何在密码表单后显示最后一个带有数据的视图控制器?的主要内容,如果未能解决你的问题,请参考以下文章

用户在 didSelectRowAt 方法中选择原始数据后如何显示视图控制器 4 秒

关闭视图控制器

POST表单提交后django显示消息

ASP.NET MVC 在 Ajax 调用控制器后显示视图

Ext JS 4 - 如何在视图中显示其他视图?

如何在 Access 表单中显示超链接(数据表视图)