私はアプリのログインシステムで作業していて、ユーザーがと登録していたら、アプリ。意味は、ではなく、ログイン画面に戻ってから、アプリケーションに「リダイレクト」するか、登録後にログインするよう促されます。所望の結果は、次のコードで動作している:ユーザー登録した場合においてビュー階層にビューがないUITabBarControllerを表示しようとしました - Firebase、Swift
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
//The disallowed character set is the inverse of the allowed characters
disallowedUsernameCharacters = allowedUsernameCharacters.invertedSet
//Set the delegates
confirmPassTextField.delegate = self
passwordTextField.delegate = self
usernameTextField.delegate = self
emailTextField.delegate = self
//Observe authentication events, if the authentication is successful, perform the segue
ref.observeAuthEventWithBlock { (authData) -> Void in
if authData != nil {
//Use standard defaults
let prefs:NSUserDefaults = NSUserDefaults.standardUserDefaults()
//Store the uid
prefs.setObject(authData.uid as String, forKey: "UID")
self.performSegueWithIdentifier(self.successfulSignUp, sender: nil)
}
}
}
、認証され、それはアプリケーション自体の5つのタブ/ビューを含むUITabBarControllerにセグエを実行します。これはうまくいきますが、私は与えられました警告:ビューはウィンドウ階層に表示されません!
これはかなりの一般的な警告であると思われます。しかし、私はそれがアプリケーションのすべての部分が期待どおりに動作するように修正したいと思います。私は何人かの人々は、コード部分入れ推奨ことが判明:セグエが呼び出された時点での階層にされていない可能性のために、現在のビューのviewWillAppear法の内部
//Observe authentication events, if the authentication is successful, perform the segue
ref.observeAuthEventWithBlock { (authData) -> Void in
if authData != nil {
//Use standard defaults
let prefs:NSUserDefaults = NSUserDefaults.standardUserDefaults()
//Store the uid
prefs.setObject(authData.uid as String, forKey: "UID")
self.performSegueWithIdentifier(self.successfulSignUp, sender: nil)
}
}
を、私は考えていませんそれはただちに呼び出されるのではなく、認証イベントでしかないからです。私はこのメソッドをイベントに応じて頻繁に呼び出すことができるので、ここに入れたくありません。
私はまた何人かの人々がの線に沿って何かを別のスレッドでそれを実行していたことがわかった。
dispatch_async(dispatch_get_main_queue(), {
self.performSegueWithIdentifier(self.successfulSignUp, sender: nil)
})
しかし、セグエをトリガされたビューコントローラを「登録」、ということである私は考えています、トップビューコントローラではないため、エラーが発生しています。また、解決策はUINavigationControllerを埋め込むことです。これが解決策であれば誰でもどのようにこれを行うのかを知っていますか?別の解決策がある場合、それは何でしょうか?どんな助けも素晴らしいだろう!乾杯。
EDIT:
エントリポイントはUITabBarControllerにあり、かつAppDelegate.swiftに私は、ユーザーが確認することでログインしているかどうかを確認しますユーザーのデフォルト値がブール値で、ログインしていない場合はrootControllerをLoginViewControllerに変更します。ユーザーはログインでき、UITabBarControllerにセグメンテーションします。または登録できます。 UITabBarControllerに分割されます - ここで私は警告を受け取ります
メインスレッドでperformSegueWithIdentifierを実行する必要があります。 dispatch_asyncの追加は正しいです。 – ryantxr
私はまだdispatch_asyncで警告を受け取ります – coopwatts