IF statment не проверяет условие при первом запуске - PullRequest
2 голосов
/ 06 июля 2011

Я новичок в программировании, и у меня есть приложение, которое имеет вид входа в систему при запуске и просит пользователя ввести свое имя, которое используется во всей программе. После того, как они введут свое имя и войдут в систему, им будет представлен вид главного меню. Их имя сохраняется с помощью NSUserdefaults.

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

Я знаю, что приложение хранит детали, потому что оно используется для приложения, но я не могу понять, почему. Вот мой код Если бы кто-то мог помочь, он был бы очень признателен.

-(IBAction)LogInButton:(id)sender
{
     NSString *tempStr = [[NSUserDefaults standardUserDefaults] objectForKey:@"UserName"];

     if(tempStr.length==0) 
     {
          NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
          [prefs setObject:Name.text forKey:@"UserName"];
          [prefs synchronize];

          LogInView *Logview = [[LogInView alloc] initWithNibName:@"LogInView" bundle:nil];
          [self presentModalViewController:Logview animated:YES];
     }
     else 
     {
          MainMenuView *mainview = [[MainMenuView alloc] initWithNibName:@"MainMenuView"      bundle:nil];
          [self presentModalViewController:mainview animated:YES];
     }
}

Ответы [ 2 ]

3 голосов
/ 06 июля 2011

Судя по вашему описанию, вы хотите

  • Вкл. viewDidLoad проверьте, вошел ли пользователь в систему
    • Если ДА, покажите MainMenu
    • Если НЕТ, показать LogInView

Код может выглядеть следующим образом

- (void)viewDidLoad
{
  [super viewDidLoad];

  [self showCorrectController];
}

Метод показа правильного контроллера может выглядеть следующим образом

- (void)showCorrectController
{
  UIViewController *viewController = nil;

  if ([self isLoggedIn]) {
    viewController = [[MainMenuView alloc] init];
  } else {
    viewController = [[LogInView alloc] init];
  }

  [self presentModalViewController:viewController animated:YES];
  [viewController release]; viewController = nil;
}

Вспомогательный метод называется isLoggedIn, который выглядит следующим образом

- (BOOL)isLoggedIn
{
  // The double negation just means we get a boolean response
  return !![[NSUserDefaults standardUserDefaults] objectForKey:@"UserName"];
}

Теперь измените ваш оригинальный метод на что-то вроде этого

-(IBAction)LogInButton:(id)sender
{
  NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
  [prefs setObject:Name.text forKey:@"UserName"];
  [prefs synchronize];
  [self showCorrectController];
}

Есть довольноНесколько вещей, которые можно было бы сделать, чтобы привести это в порядок, но это должно послужить началом для вас.

Слово предостережения в отношении названий вещей.Соглашение состоит в том, чтобы начинать имена методов и переменных со строчных букв.Классы и константы начинаются с заглавных букв.

0 голосов
/ 06 июля 2011

Выглядит так, как в первый раз:

  • Отображается экран входа в систему
  • Пользователь нажимает кнопку входа (и этот метод, который вы показываете, вызывается)
  • Сохраненное значение изначально не задано, поэтому оно имеет значение true: if(tempStr.length==0)
  • Вы сохраняете новое значение
  • Отображается еще один экран входа в систему

Но я не думаю, что вы показываете весь код.Что запускается при запуске приложения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...