2015-09-09 43 views
1

我已經看過StackOverFlow。沒有現有的問題似乎幫助我。在PFLogInViewController上呈現* .viewController,其視圖不在窗口層次結構中

我使用ParseUI來處理用戶登錄功能,但在簽署新用戶時遇到問題。

問題:當用戶去註冊,點擊「註冊」按鈕,這個錯誤似乎也沒有發生賽格瑞:

<Warning: Attempt to present edus.ClassEntryViewController: 0x7f8800ceb0a0> on <PFLogInViewController: 0x7f8800c2f520> whose view is not in the window hierarchy! 

我不知道如何解決這個問題。以下相關代碼:

import UIKit 
import Parse 
import Bolts 
import ParseUI 
import FBSDKCoreKit 
import ParseFacebookUtils 


@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 

var window: UIWindow? 
var parseLoginHelper: ParseLoginHelper! 

override init() { 
    super.init() 

    parseLoginHelper = ParseLoginHelper {[unowned self] user, error in 
     // Initialize the ParseLoginHelper with a callback 
     if let error = error { 
      // 1 
      ErrorHandling.defaultErrorHandler(error) 
     } else if let user = user { 
      let storyboard = UIStoryboard(name: "Main", bundle: nil) 
      //creation 
      let classNavEntry = storyboard.instantiateViewControllerWithIdentifier("ClassNavEntry") as! UIViewController 
      //presentation. PROBLEM HERE?? 
      self.window?.rootViewController!.presentViewController(classNavEntry, animated:true, completion:nil) 
     } 
    } 
} 

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
let user = PFUser.currentUser() 

    let startViewController: UIViewController; 

    if (user != nil) { 
     // 3 
     // if we have a user, set the ClassNavEntry to be the initial View Controller 
     let storyboard = UIStoryboard(name: "Main", bundle: nil) 
     //problem may arise here 
     startViewController = 
       storyboard.instantiateViewControllerWithIdentifier("ClassNavEntry") as! UINavigationController 
    } else { 
     // 4 
     // Otherwise set the LoginViewController to be the first 
     let loginViewController = PFLogInViewController() 
     loginViewController.fields = .UsernameAndPassword | .LogInButton | .SignUpButton | .PasswordForgotten | .Facebook 
     loginViewController.delegate = parseLoginHelper 
     loginViewController.signUpController?.delegate = parseLoginHelper 
     startViewController = loginViewController 
    } 

    // 5 
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds) 
    self.window?.rootViewController = startViewController; 
    self.window?.makeKeyAndVisible() 

更新:我知道是什麼原因造成的問題,仍然搞清楚如何解決它。

問題是有兩個視圖控制器:loginViewController和SignupViewController。我指定根視圖控制器是這裏的loginViewController:

loginViewController.delegate = parseLoginHelper 
     loginViewController.signUpController?.delegate = parseLoginHelper 
     startViewController = loginViewController 
    } 

    // 5 
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds) 
    //THIS SPECIFIES ROOTVIEW TO BE LOGINVIEWCONTROLLER 
    self.window?.rootViewController = startViewController 
    self.window?.makeKeyAndVisible() 

所以我需要能夠調用parseHelper上SignUpViewController以及...

回答

1

您ParseLoginHelper加入這行代碼,反應新會員註冊功能(didSignUpUser)

signUpController.dismissViewControllerAnimated(true, completion: nil) 

它裏面應該是這樣的:

extension ParseLoginHelper : PFSignUpViewControllerDelegate { 
    func signUpViewController(signUpController: PFSignUpViewController, didSignUpUser user: PFUser) { 
    signUpController.dismissViewControllerAnimated(true, completion: nil) 
    self.callback(user, nil) 
    } 
} 
0

在ErrorHandling.defaultErrorHandler(錯誤)你調用windows [0]?這應該是問題。

您正嘗試在不是當前顯示的窗口的窗口上顯示視圖控制器(錯誤)。

一種解決方案可能是將窗口作爲參數傳遞給ErrorHandling函數。

+0

哎ESSAM!主要問題是PFUserSignUp是一個不同於PFLogIn的視圖控制器...我必須找到一種方法來使用PFUserSignUp中的ParseLogInHelper –

相關問題