Как показать последний контроллер представления с данными в нем после формы пароля?

У меня есть две раскадровки. Первый используется для отображения пароля. Он имеет два контроллера представления и собственный контроллер навигации. Вторая раскадровка содержит контроллеры представления для приложения, а также контроллер навигации. Пользователь должен вводить пароль каждый раз, когда запускает приложение, если он не отключит его в настройках.

Вот мой 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];
}

Вот метод делегирования из Password: если пользователь вводит "правильный" пароль, открывается главный экран:

- (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];
}

Мой вопрос: в этой схеме для отображения формы пароля как показать последний контроллер представления пользователя, в котором он что-то набрал и данные в нем (текст в текстовых полях и т. д.)? Потому что если пользователь нажмет кнопку «Домой» и после запуска приложения все данные исчезнут и появится главный экран приложения=) Может быть, мне стоит изменить алгоритм отображения формы пароля? Спасибо за ответ и советуем! Приятного программирования!)


person c-villain    schedule 10.03.2014    source источник


Ответы (1)


Форма пароля не имеет к этому никакого отношения, как только приложение будет убито (что произойдет в какой-то момент, если оно будет работать в фоновом режиме), данные в памяти будут потеряны.

Прежде всего вам нужно будет найти способ сохранить (сохранить) состояние приложения. Возможно, вы можете сделать это с помощью NSUserDefaults для очень простого сохранения, например: последний посещенный экран пользователя, время последнего посещения или подобное.

Но для более продвинутого постоянства, в котором хранятся введенные пользователем данные, вам придется закодировать свою собственную модель данных. Есть много способов сделать это, поэтому я могу только дать вам несколько начальных указателей:

  • Если у вас есть реляционные структурированные данные, используйте Основные данные.
  • Для самого простого хранилища вы также можете использовать списки свойств и файлы.
  • Для синхронизации вы можете использовать Dropbox или iCloud API.

Для начала нужно решить, что вам нужно и как вы собираетесь подходить к этой проблеме. Вам нужно будет написать немного кода, чтобы все это работало правильно.

person Legoless    schedule 10.03.2014
comment
Нет-нет, вы меня не совсем поняли:) Я хочу восстановить свой контроллер представления и данные в нем (текст и т. д.) после того, как я запустил приложение:) но через мою схему я должен всегда идти к основному vc :) но мне нужно для отображения последнего контроллера просмотра :) - person c-villain; 11.03.2014