2015-02-06 6 views
1

Будучи новым в быстры, я пытаюсь использовать раскадровку, чтобы перейти к LoginController используя следующий кодНевозможно создать экземпляр ViewController из раскадровки как RootViewController в скор

var window: UIWindow? 

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 
{ 

    var type = UIUserNotificationType.Badge | UIUserNotificationType.Alert | UIUserNotificationType.Sound; 
    var setting = UIUserNotificationSettings(forTypes: type, categories: nil); 
    UIApplication.sharedApplication().registerUserNotificationSettings(setting); 
    UIApplication.sharedApplication().registerForRemoteNotifications(); 

    var navCtrl = UINavigationController(); 
    var isLoggedIn = NSUserDefaults.standardUserDefaults().boolForKey(USERDEFAULT_ISLOGGEDIN); 
    if(isLoggedIn) 
    { 
     let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
     var mainController: CategoriesController = mainStoryboard.instantiateViewControllerWithIdentifier(SEGUE_CATEGORIES) as CategoriesController 
     navCtrl.pushViewController(mainController, animated: true); 
    } 
    else 
    { 
     let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
     var mainController: LoginController = mainStoryboard.instantiateViewControllerWithIdentifier(SEGUE_LOGIN) as LoginController 
     navCtrl.pushViewController(mainController, animated: true); 
    } 

    self.window?.rootViewController = navCtrl; 
    self.window?.makeKeyAndVisible(); 

    return true 
} 

Однако он просто показывает пустой экран. Что неправильно при назначении navController как rootViewController?

+0

'self.window' nil? Замените 'self.window?' На 'self.window!' В двух вызовах. Вероятно, это ошибка, если окно равно нулю, поэтому вы должны принудительно развернуть. –

+0

дает плохую ошибку, а затем @MatthiasBauch –

ответ

1

Вы не создали окно, поэтому self.window будет nil. Система создает окно, только если вы запускаете приложение из xib или из раскадровки. Если вы не используете их, вам нужно создать его самостоятельно.

Поскольку вы условно разворачиваете с помощью ?, назначение navCtrl и вызов makeKeyAndVisible() вообще не будут экспрессированы.

Просто создайте UIWindow перед использованием:

func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool { 
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds) 
    // ... 
    self.window!.rootViewController = navCtrl; 
    self.window!.makeKeyAndVisible(); 
    return true 
} 

Я рекомендовал бы разворачивать все вызовы, которые связаны с window!. Ошибка при отсутствии окна.

0

Попробуйте этот путь. Я думаю, вы не можете нажать UINavigationController, пока не установите свой корневой ViewController.

var navCtrl 
let isLoggedIn = NSUserDefaults.standardUserDefaults().boolForKey(USERDEFAULT_ISLOGGEDIN); 
if (isLoggedIn) 
{ 
    let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
    var mainController: CategoriesController = mainStoryboard.instantiateViewControllerWithIdentifier(SEGUE_CATEGORIES) as CategoriesController 

    navCtrl = UINavigationController(rootViewController:mainController) 
} 
else 
{ 
    let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
    var mainController: LoginController = mainStoryboard.instantiateViewControllerWithIdentifier(SEGUE_LOGIN) as LoginController 
    navCtrl = UINavigationController(rootViewController:mainController) 
}