2015-09-09 42 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 –

相关问题