Извършването на Segue с помощта на код показва черен екран

Опитвам се да направя преминаване към друг екран с помощта на код, но той ми показва черен екран с помощта на Xcode 7 beta 6. Ето моя първи файлов код на контролера за изглед

//  ViewController.swift
//  Segue through programming
//

import UIKit

class ViewController: UIViewController{

    @IBAction func buttonPressed(sender: AnyObject) {
        presentViewController(secondController(), animated: true) { () -> Void in

        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

person Community    schedule 30.08.2015    source източник
comment
какво е secondViewController()?   -  person Nikita Took    schedule 30.08.2015
comment
Предполагам, че secondController е името на класа на контролера на изгледа на тази целева сцена. Бих предложил да следвате конвенциите за именуване на Cocoa и да изписвате първата буква от имената на вашите класове с главна буква. По конвенция променливите започват с малки букви, но класовете започват с главни букви.   -  person Rob    schedule 30.08.2015


Отговори (1)


Това ще работи само ако secondController програмно създаде своя изглед. Ако искате да използвате сцена с разкадровка (което е много по-често), можете да направите следното:

@IBAction func buttonPressed(sender: AnyObject) {
    let controller = storyboard?.instantiateViewControllerWithIdentifier("foo")
    presentViewController(controller!, animated: true, completion: nil)
}

Това очевидно предполага, че сте указали идентификатор на разкадровка за целевата сцена.

въведете описание на изображението тук

Или можете да създадете преход между двете сцени в IB, като управлявате плъзгане от иконата на контролера за изглед в горната част на първата сцена към втората сцена:

въведете описание на изображението тук

и след това дайте на този преход собствен идентификатор на сценария:

въведете описание на изображението тук

След това можете да извикате segue програмно:

@IBAction func buttonPressed(sender: AnyObject) {
    performSegueWithIdentifier("bar", sender: self)
}
person Rob    schedule 30.08.2015
comment
получих тази грешка 015-08-30 15:57:36.886 Преминаване през програмиране [5051:6711545] *** Прекратяване на приложението поради неуловено изключение „NSInvalidArgumentException“, причина: „Storyboard (‹UIStoryboard: 0x7b6b7ca0›) не съдържа контролер за изглед с идентификатор "foo" - person ; 30.08.2015
comment
@Alexander - Дадохте ли на контролера за изглед на сцената на местоназначението ви идентификатор на сценарий на foo? Ако не, променете кода си, за да съответства на използвания от вас идентификатор на сценария. - person Rob; 30.08.2015
comment
На моя втори контролер за изглед, към който искам да премина, има Storyboard ID на foo, но все още получавам грешката - person ; 30.08.2015
comment
Проверете отново дали ID на Storyboard за целевата сцена е foo (без кавички, съвпадения с главни букви, без интервали и т.н.). - person Rob; 30.08.2015
comment
Мисля, че използвам Xcode 7 beta 6, затова не работи - person ; 30.08.2015
comment
Не, работи добре в Xcode 6 beta 6. Току-що го тествах и работи както винаги. Случва се нещо друго, но без да видя проекта, е трудно да се каже. - person Rob; 30.08.2015
comment
ето връзките код сториборд - person ; 30.08.2015
comment
Да, вярвам ви, но има нещо, което не е очевидно веднага в проекта ви, което ви пречи. Може би създайте празен проект и го опитайте там и ще видите, че работи там. Но тук се случва нещо друго, защото това е изпитана и вярна техника, но не е очевидно какво не е наред във вашата ситуация. (Например имате ли множество разкадровки? Изтрихте ли извлечени данни? Направихте ли Product - Clean?) Без възпроизводим пример за проблема, не съм сигурен, че мога да помогна допълнително. - person Rob; 30.08.2015