2016-01-21 3 views
3

Я работаю, чтобы обойти экран входа, если текущий пользователь не равен нулю. Чтобы сделать это, я выполнил рекомендацию, опубликованную here. После запуска кода я получаю пустой белый вид в симуляторе без каких-либо ошибок. Вот код:Parse - Bypass Вход в AppDelegate

storyboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()); 
     let currentUser = PFUser.currentUser() 
     print(currentUser) 
     if currentUser != nil { 
      self.window?.rootViewController = storyboard?.instantiateViewControllerWithIdentifier("HomeViewController"); 
     } 

Стоит отметить, что HomeViewController основан на навигации по Tab. Что мне не хватает?

Установки у меня есть:

  • App запущен и первый взгляд Подписать В представлении (с кнопкой для регистрации). Это начальное представление - SignInViewController, и я включил в него UINavigationController.
  • Пользователь может войти в систему, указав учетные данные (если правильно, segue выполняется для перенаправления на HomeViewController)
  • Пользователь может зарегистрироваться и выполнить действия (несколько контроллеров). В конце они будут перенаправлены на Home View Controller.
+0

Похоже, вы должны положить 'rootViewController = yourTabBarViewController' – Breek

+0

Как это работает?Потому что, если пользователь не вошел в систему, они не будут отправляться в учетные записи или учетные записи. –

+0

Вы используете пользовательский режим входа в систему или по умолчанию? – TekShock

ответ

4

Я предполагаю, что ваш дом панель вкладок контроллер имеет идентификатор "HomeViewController" и ваш знак в виде контроллере имеет идентификатор "SignInViewController" и этот код находится в ваш метод didFinishLaunchingWithOptions() AppDelegate:

storyboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()) 
if let currentUser = PFUser.currentUser() { // currentUser is not nil 
    // set up app for valid in user 
    self.window?.rootViewController = storyboard?.instantiateViewControllerWithIdentifier("HomeViewController") 
    return true // don't load the rootViewController from your storyboard (if you have an initial view set) 
} else { // there is no current user 
    // set up app for new or non logged in user 
    self.window?.rootViewController = storyboard?.instantiateViewControllerWithIdentifier("SignInViewController") 
    return true 
} 

Из ваших комментариев, это звучит, как у вас есть навигационный контроллер с его корневым видом контроллером является вашим знаком в виде контроллере, который является белым y, когда вы переходите к контроллеру панели вкладок, вы получаете панель навигации.

Поскольку с моим подходом вы не получаете SEGUE (и знак в панели навигации зрения контроллера), инициализировать новый UINavigationController и установить его rootViewController быть ваша панель вкладок контроллер:

if let currentUser = PFUser.currentUser() { // currentUser is not nil 
    // load tab bar controller 
    let tabBarController = storyboard?.instantiateViewControllerWithIdentifier("TabBarViewController") 

    // initialize a new navigation controller with the tab bar controller as its rootViewController 
    let navC = UINavigationController(rootViewController: tabBarController) 

    // set the window's root view controller to be your new navigation controller 
    self.window?.rootViewController = navC 
} 
+0

Это загружает HomeControllerView, но без всех вкладок, которые были там из-за того, что Tab Controller находится на своем месте. Любая идея, как это решить? –

+0

@ksa_coder Является ли ваш контроллер панели вкладок в раскадровке? Дайте ему идентификатор раскадровки и замените HomeViewController на идентификатор контроллера панели вкладок выше. – JAL

+0

ОК сделал это .... но вид не полностью отображается правильно. Строка вкладок отображается правильно, но верхняя панель навигации полностью исчезла во всех вкладках. Я рад, что вы помогаете :) –

1

Можете вдаваться в подробности?

Это, как я могу проверить, если кто-то уже вошли в

override func viewDidAppear(animated: Bool) { 
     let currentUser = PFUser.currentUser() 
       if currentUser != nil { 
        self.performSegueWithIdentifier("nameOfTheSegueIdentifier", sender: self) 

      } 
} 
+1

То, что вы здесь делаете, находится в определенном контроллере вида. Лучшая практика обработки проверки, если пользователь вошел в систему или нет, находится в классе AppDelegate. –

1

Вообще PFUser.currentUser() не ноль. Вы должны использовать PFUser.currentUser().username. Используйте этот код в ваш входа/регистрации ViewController (не AppDelegate (это работает отлично))

override func viewDidAppear(animated: Bool) { 
    if PFUser.currentUser().username != nil { 
     self.performSegueWithIdentifier("SEGUE", sender: self) 
    } 
} 

Две вещи, чтобы заметить в этом коде: он выполняется в методе viewDidAppear; не viewDidLoad. Вы не можете выполнять какие-либо сеансы, пока не появится представление. Кроме того, SEGUE является временным заполнителем для вашего имени. Этот переход должен передать пользователя на главную страницу.

Примечание: данный код покажет сцену login/signup viewcontroller's около секунды. Я рекомендую положить UIImageView на ViewController, который имеет тот же фрейм, что и вид (охватывает весь экран). Если имя пользователя равно nil, вы можете поместить оператор else, который говорит imageView.alpha = 0 (установите альфа-1 в viewDidLoad). Надеюсь это поможет.