Извършване на Segue с идентификатор от ViewDidAppear не работи

Имам изглед за страница с правила и условия за моето приложение, която се опитвам да накарам да се показва модално при първото отваряне на приложението. Знам, че методът performSegueWithIdentifier се извиква в точното време, но съответният изглед никога не се зарежда. viewDidLoad в бъдеще контролерът за изглед никога не се извиква. Също така идентификаторите на segue съвпадат правилно, доколкото мога да преценя. Това води до появата на празен черен екран.

Празен екран

   override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(true)

    print("Here")

    if !defaults.boolForKey("hasLaunchedBefore"){

        defaults.setBool(true, forKey: "hasLaunchedBefore")
        setSettingsForFirstTime()

        self.performSegueWithIdentifier("firstTime", sender: self)

    }

}

Маркираният ViewController е мястото, откъдето започва последователността и трябва да завърши при другия контролер за навигация и следователно страницата с правила и условия, която никога не се зарежда. Горният навигационен контролер на ViewController е входната точка за приложението. Storyboard


person themaxgoldman    schedule 25.10.2015    source източник
comment
Имате странна схема в сценария, NavigationController трябва да е първият, за вашия TableViewController трябва да вградите с NavigationController и след това да направите преминаване от TableView към следващия ViewController   -  person Alexey Pichukov    schedule 25.10.2015
comment
TableViewController е вграден в контролер за навигация, който не се вижда на снимката. Правилата и условията ViewController е вграден в отделен ViewController, защото това ми позволява да дам на изгледа навигационна лента, докато го представям модално. Правил съм това и преди и не е било проблематично и не виждам защо би създавало проблем по този начин.   -  person themaxgoldman    schedule 25.10.2015


Отговори (1)


Това е така, защото имате контролер за навигация в средата. Можете да преминете покрай него в подготовката си за преминаване и да направите изгледа невидим, преди да започнете преминаването, за да покажете показване направо към изгледа с правила и условия

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    self.view.hidden = true
}

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(true)

    if !defaults.boolForKey("hasLaunchedBefore"){

        defaults.setBool(true, forKey: "hasLaunchedBefore")
        setSettingsForFirstTime()

        self.performSegueWithIdentifier("firstTime", sender: self)
    }
    else { self.view.hidden = false }
}



override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "Id" {
            if let navVc = segue.destinationViewController is UINavigationController {
                if let contentVc = (self as! UINavigationController).visibleViewController {
                     //do preparation
                }
            } 
        }
   }
person Lukas    schedule 25.10.2015
comment
Не правя нищо, за да се подготвя за преминаване, можете ли да разясните? - person themaxgoldman; 25.10.2015
comment
Трябва да се подготвите за преминаване, ще добавя как да направите това, ако не знаете - person Lukas; 25.10.2015
comment
Използвал съм метода за подготовка за преминаване преди, но реших, че тъй като няма информация, която трябва да предам на другия viewController, не е необходимо да правя това. Ако не искам да предавам информация, има ли още нещо, което трябва да направя? - person themaxgoldman; 25.10.2015